w6c: f32 arg-push/pop uses MOVSS not MOVSD (#143)
cstage spilled f32 args via MOVSD (8-byte); ABI-correct is MOVSS (4-byte, single class) per SysV (ref/qbe amd64/emit.c:524 — slot-copy-through-XMM follows the float class). wwstage already emitted MOVSS; align cstage up via op_for(node_isf32) at the arg PUSH (cgen.c:5366) + POP (cgen.c:5469). Byte-id-only divergence (callee reads the f32 param low-32 regardless), but it blocked cs==ww — closes the f32-arg-push half of the float-register family (#119/#122/#125/#157). Bootstrap-NEUTRAL (no f32-arg caller in the 990-997 gated path). Test 907_f32arg_run (f32-arg push single/multi/mixed/ stack, cs==ww byte-id). Make test 187/187 incl 990-997. Unblocks fold-5b (strconv f32tos passes f32 to f32bits).
This commit is contained in:
6
Makefile
6
Makefile
@@ -350,6 +350,7 @@ TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
||||
$(BIN)/test_f64xmm_run \
|
||||
$(BIN)/test_f32lit_run \
|
||||
$(BIN)/test_f32stamp_run \
|
||||
$(BIN)/test_f32arg_run \
|
||||
$(BIN)/test_tuprecv_f64_run \
|
||||
$(BIN)/test_floats_run \
|
||||
$(BIN)/test_size_type_run \
|
||||
@@ -1248,6 +1249,11 @@ $(BIN)/test_f32stamp_run: test/wcc/965_f32stamp_run.c $(BIN)/ww \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_f32arg_run: test/wcc/907_f32arg_run.c $(BIN)/ww \
|
||||
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
|
||||
$(BIN)/test_tuprecv_f64_run: test/wcc/956_tuprecv_f64_run.c $(BIN)/ww \
|
||||
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
||||
$(LIB)/libwwrt.a | $(BIN)
|
||||
|
||||
Reference in New Issue
Block a user