diff --git a/a64_seq_memory.cc b/a64_seq_memory.cc index c7ed1a654..773537f1a 100644 --- a/a64_seq_memory.cc +++ b/a64_seq_memory.cc @@ -367,9 +367,9 @@ struct LOAD_CONTEXT_I8 e.LDRB(i.dest, e.GetContextReg(), i.src1.value); // e.mov(i.dest, e.byte[addr]); if (IsTracingData()) { - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.mov(e.GetNativeParam(1), e.byte[addr]); - // e.CallNative(reinterpret_cast(TraceContextLoadI8)); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.LDRB(e.GetNativeParam(1).toW(), e.GetContextReg(), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadI8)); } } }; @@ -378,9 +378,9 @@ struct LOAD_CONTEXT_I16 static void Emit(A64Emitter& e, const EmitArgType& i) { e.LDRH(i.dest, e.GetContextReg(), i.src1.value); if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.word[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextLoadI16)); + e.LDRH(e.GetNativeParam(1).toW(), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadI16)); } } }; @@ -389,9 +389,9 @@ struct LOAD_CONTEXT_I32 static void Emit(A64Emitter& e, const EmitArgType& i) { e.LDR(i.dest, e.GetContextReg(), i.src1.value); if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.dword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextLoadI32)); + e.LDR(e.GetNativeParam(1).toW(), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadI32)); } } }; @@ -400,9 +400,9 @@ struct LOAD_CONTEXT_I64 static void Emit(A64Emitter& e, const EmitArgType& i) { e.LDR(i.dest, e.GetContextReg(), i.src1.value); if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.qword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextLoadI64)); + e.LDR(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadI64)); } } }; @@ -411,9 +411,9 @@ struct LOAD_CONTEXT_F32 static void Emit(A64Emitter& e, const EmitArgType& i) { e.LDR(i.dest, e.GetContextReg(), i.src1.value); if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.dword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextLoadF32)); + e.ADD(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadF32)); } } }; @@ -421,11 +421,10 @@ struct LOAD_CONTEXT_F64 : Sequence> { static void Emit(A64Emitter& e, const EmitArgType& i) { e.LDR(i.dest, e.GetContextReg(), i.src1.value); - // e.vmovsd(i.dest, e.qword[addr]); if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.qword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextLoadF64)); + e.ADD(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadF64)); } } }; @@ -434,9 +433,9 @@ struct LOAD_CONTEXT_V128 static void Emit(A64Emitter& e, const EmitArgType& i) { e.LDR(i.dest, e.GetContextReg(), i.src1.value); if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.ptr[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextLoadV128)); + e.ADD(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextLoadV128)); } } }; @@ -459,9 +458,9 @@ struct STORE_CONTEXT_I8 e.STRB(i.src2.reg(), e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.byte[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreI8)); + e.LDRB(e.GetNativeParam(1).toW(), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreI8)); } } }; @@ -476,9 +475,9 @@ struct STORE_CONTEXT_I16 e.STRH(i.src2.reg(), e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.word[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreI16)); + e.LDRH(e.GetNativeParam(1).toW(), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreI16)); } } }; @@ -493,9 +492,9 @@ struct STORE_CONTEXT_I32 e.STR(i.src2.reg(), e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.dword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreI32)); + e.LDR(e.GetNativeParam(1).toW(), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreI32)); } } }; @@ -510,9 +509,9 @@ struct STORE_CONTEXT_I64 e.STR(i.src2.reg(), e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), e.qword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreI64)); + e.LDR(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreI64)); } } }; @@ -527,9 +526,9 @@ struct STORE_CONTEXT_F32 e.STR(i.src2, e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.dword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreF32)); + e.ADD(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreF32)); } } }; @@ -544,9 +543,9 @@ struct STORE_CONTEXT_F64 e.STR(i.src2, e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.qword[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreF64)); + e.ADD(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreF64)); } } }; @@ -561,9 +560,9 @@ struct STORE_CONTEXT_V128 e.STR(i.src2, e.GetContextReg(), i.src1.value); } if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.ptr[addr]); - // e.mov(e.GetNativeParam(0), i.src1.value); - // e.CallNative(reinterpret_cast(TraceContextStoreV128)); + e.ADD(e.GetNativeParam(1), e.GetContextReg(), i.src1.value); + e.MOV(e.GetNativeParam(0), i.src1.value); + e.CallNative(reinterpret_cast(TraceContextStoreV128)); } } }; @@ -761,9 +760,9 @@ struct LOAD_I8 : Sequence> { auto addr_reg = ComputeMemoryAddress(e, i.src1); e.LDRB(i.dest, addr_reg); if (IsTracingData()) { - // e.mov(e.GetNativeParam(1).cvt8(), i.dest); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadI8)); + e.MOV(e.GetNativeParam(1).toW(), i.dest); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadI8)); } } }; @@ -777,9 +776,9 @@ struct LOAD_I16 : Sequence> { e.LDRH(i.dest, addr_reg); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1).cvt16(), i.dest); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadI16)); + e.MOV(e.GetNativeParam(1).toW(), i.dest); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadI16)); } } }; @@ -793,9 +792,9 @@ struct LOAD_I32 : Sequence> { e.LDR(i.dest, addr_reg); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1).cvt32(), i.dest); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadI32)); + e.MOV(e.GetNativeParam(1).toW(), i.dest); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadI32)); } } }; @@ -809,9 +808,9 @@ struct LOAD_I64 : Sequence> { e.LDR(i.dest, addr_reg); } if (IsTracingData()) { - // e.mov(e.GetNativeParam(1), i.dest); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadI64)); + e.MOV(e.GetNativeParam(1), i.dest); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadI64)); } } }; @@ -823,9 +822,9 @@ struct LOAD_F32 : Sequence> { assert_always("not implemented yet"); } if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.dword[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadF32)); + e.MOV(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadF32)); } } }; @@ -837,9 +836,9 @@ struct LOAD_F64 : Sequence> { assert_always("not implemented yet"); } if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.qword[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadF64)); + e.MOV(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadF64)); } } }; @@ -854,9 +853,9 @@ struct LOAD_V128 : Sequence> { e.EXT(i.dest.reg().B16(), i.dest.reg().B16(), i.dest.reg().B16(), 8); } if (IsTracingData()) { - // e.lea(e.GetNativeParam(1), e.ptr[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryLoadV128)); + e.MOV(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryLoadV128)); } } }; @@ -878,9 +877,9 @@ struct STORE_I8 : Sequence> { } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.mov(e.GetNativeParam(1).cvt8(), e.byte[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreI8)); + e.LDRB(e.GetNativeParam(1).toW(), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreI8)); } } }; @@ -900,9 +899,9 @@ struct STORE_I16 : Sequence> { } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.mov(e.GetNativeParam(1).cvt16(), e.word[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreI16)); + e.LDRH(e.GetNativeParam(1).toW(), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreI16)); } } }; @@ -922,9 +921,9 @@ struct STORE_I32 : Sequence> { } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.mov(e.GetNativeParam(1).cvt32(), e.dword[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreI32)); + e.LDR(e.GetNativeParam(1).toW(), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreI32)); } } }; @@ -943,9 +942,9 @@ struct STORE_I64 : Sequence> { } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.mov(e.GetNativeParam(1), e.qword[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreI64)); + e.LDR(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreI64)); } } }; @@ -965,9 +964,9 @@ struct STORE_F32 : Sequence> { } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.lea(e.GetNativeParam(1), e.ptr[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreF32)); + e.MOV(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreF32)); } } }; @@ -987,9 +986,9 @@ struct STORE_F64 : Sequence> { } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.lea(e.GetNativeParam(1), e.ptr[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreF64)); + e.MOV(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreF64)); } } }; @@ -1014,9 +1013,9 @@ struct STORE_V128 } if (IsTracingData()) { addr_reg = ComputeMemoryAddress(e, i.src1); - // e.lea(e.GetNativeParam(1), e.ptr[addr]); - // e.lea(e.GetNativeParam(0), e.ptr[addr]); - // e.CallNative(reinterpret_cast(TraceMemoryStoreV128)); + e.MOV(e.GetNativeParam(1), addr_reg); + e.MOV(e.GetNativeParam(0), addr_reg); + e.CallNative(reinterpret_cast(TraceMemoryStoreV128)); } } };