diff --git a/cranelift/filetests/isa/intel/binary32-float.cton b/cranelift/filetests/isa/intel/binary32-float.cton index b0a2c83c8f..0d823e2dae 100644 --- a/cranelift/filetests/isa/intel/binary32-float.cton +++ b/cranelift/filetests/isa/intel/binary32-float.cton @@ -37,6 +37,11 @@ ebb0: ; asm: movd %xmm2, %esi [-,%rsi] v17 = bitcast.i32 v11 ; bin: 66 0f 7e d6 + ; asm: movaps %xmm2, %xmm5 + [-,%xmm5] v18 = copy v11 ; bin: 0f 28 ea + ; asm: movaps %xmm5, %xmm2 + [-,%xmm2] v19 = copy v10 ; bin: 0f 28 d5 + ; Binary arithmetic. ; asm: addss %xmm2, %xmm5 @@ -212,6 +217,11 @@ ebb0: ; No i64 <-> f64 bitcasts in 32-bit mode. + ; asm: movaps %xmm2, %xmm5 + [-,%xmm5] v18 = copy v11 ; bin: 0f 28 ea + ; asm: movaps %xmm5, %xmm2 + [-,%xmm2] v19 = copy v10 ; bin: 0f 28 d5 + ; Binary arithmetic. ; asm: addsd %xmm2, %xmm5 diff --git a/cranelift/filetests/isa/intel/binary64-float.cton b/cranelift/filetests/isa/intel/binary64-float.cton index 542a712f26..12a26c937e 100644 --- a/cranelift/filetests/isa/intel/binary64-float.cton +++ b/cranelift/filetests/isa/intel/binary64-float.cton @@ -91,6 +91,11 @@ ebb0: ; asm: xorps %xmm5, %xmm10 [-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5 + ; asm: movaps %xmm10, %xmm5 + [-,%xmm5] v38 = copy v11 ; bin: 41 0f 28 ea + ; asm: movaps %xmm5, %xmm10 + [-,%xmm10] v39 = copy v10 ; bin: 44 0f 28 d5 + ; Unary arithmetic. ; asm: sqrtss %xmm5, %xmm10 @@ -281,6 +286,11 @@ ebb0: ; asm: xorps %xmm5, %xmm10 [-,%xmm10] v37 = bxor v11, v10 ; bin: 44 0f 57 d5 + ; asm: movaps %xmm10, %xmm5 + [-,%xmm5] v38 = copy v11 ; bin: 41 0f 28 ea + ; asm: movaps %xmm5, %xmm10 + [-,%xmm10] v39 = copy v10 ; bin: 44 0f 28 d5 + ; Unary arithmetic. ; asm: sqrtsd %xmm5, %xmm10 diff --git a/lib/cretonne/meta/isa/intel/encodings.py b/lib/cretonne/meta/isa/intel/encodings.py index c7f9a7c0b6..5f295eddf2 100644 --- a/lib/cretonne/meta/isa/intel/encodings.py +++ b/lib/cretonne/meta/isa/intel/encodings.py @@ -355,6 +355,10 @@ enc_flt(base.bitcast.i32.f32, r.rfumr, 0x66, 0x0f, 0x7e) I64.enc(base.bitcast.f64.i64, *r.frurm.rex(0x66, 0x0f, 0x6e, w=1)) I64.enc(base.bitcast.i64.f64, *r.rfumr.rex(0x66, 0x0f, 0x7e, w=1)) +# movaps +enc_flt(base.copy.f32, r.furm, 0x0f, 0x28) +enc_flt(base.copy.f64, r.furm, 0x0f, 0x28) + # cvtsi2ss enc_i32_i64(base.fcvt_from_sint.f32, r.frurm, 0xf3, 0x0f, 0x2a)