@@ -211,10 +211,10 @@ impl ABIMachineSpec for X64ABIMachineSpec {
211211 ) ;
212212 }
213213
214- // Windows fastcall dictates that `__m128i` parameters to a function
215- // are passed indirectly as pointers, so handle that as a special
216- // case before the loop below.
217- if param. value_type . is_vector ( )
214+ // Windows fastcall dictates that `__m128i` and `f128` parameters to
215+ // a function are passed indirectly as pointers, so handle that as a
216+ // special case before the loop below.
217+ if ( param. value_type . is_vector ( ) || param . value_type . is_float ( ) )
218218 && param. value_type . bits ( ) >= 128
219219 && args_or_rets == ArgsOrRets :: Args
220220 && is_fastcall
@@ -504,9 +504,9 @@ impl ABIMachineSpec for X64ABIMachineSpec {
504504 }
505505
506506 fn gen_load_base_offset ( into_reg : Writable < Reg > , base : Reg , offset : i32 , ty : Type ) -> Self :: I {
507- // Only ever used for I64s and vectors; if that changes, see if the
508- // ExtKind below needs to be changed.
509- assert ! ( ty == I64 || ty. is_vector( ) ) ;
507+ // Only ever used for I64s, F128s and vectors; if that changes, see if
508+ // the ExtKind below needs to be changed.
509+ assert ! ( ty == I64 || ty. is_vector( ) || ty == F128 ) ;
510510 let mem = Amode :: imm_reg ( offset, base) ;
511511 Inst :: load ( ty, mem, into_reg, ExtKind :: None )
512512 }
0 commit comments