exprfloatkind's N_CALL arm only set the callee name for an N_IDENT callee, so a module-qualified `mod.g()` callee never reached any return-type lookup and fell through to integer (kind 0). Both f64 consumers then took the integer path for an imported f64-returning fn: cgcast emitted MOVSXD instead of CVTTSD2SI (#101), and pushargsrev spilled the call result as a GPR PUSHQ/POPQ instead of the MOVSD float spill (#98) — one root, two symptoms. Route the N_DOT callee through fnretlookupmod with the module qualifier, mirroring nodeisslice / nodeisstr's #34 N_DOT arm, so a cross-module f64 call resolves to kind 2 exactly like same-module already does. This aligns wwstage UP to cstage, whose cg_isfloat reads the resolved call result type directly (cmd/w6c/cgen.c:117,155) and is correct for both cases. Consumers (cgcast, pushargsrev) unchanged.
124 KiB
124 KiB