diff --git a/src/coreclr/vm/amd64/cgenamd64.cpp b/src/coreclr/vm/amd64/cgenamd64.cpp index 9ddeafc268f6d9..af27637759473b 100644 --- a/src/coreclr/vm/amd64/cgenamd64.cpp +++ b/src/coreclr/vm/amd64/cgenamd64.cpp @@ -388,14 +388,14 @@ void EncodeLoadAndJumpThunk (LPBYTE pBuffer, LPVOID pv, LPVOID pTarget) pBuffer[0] = 0x49; pBuffer[1] = 0xBA; - *((UINT64 UNALIGNED *)&pBuffer[2]) = (UINT64)pv; + SET_UNALIGNED_64(&pBuffer[2], pv); // mov rax, pTarget 48 b8 xx xx xx xx xx xx xx xx pBuffer[10] = 0x48; pBuffer[11] = 0xB8; - *((UINT64 UNALIGNED *)&pBuffer[12]) = (UINT64)pTarget; + SET_UNALIGNED_64(&pBuffer[12], pTarget); // jmp rax ff e0 @@ -427,7 +427,7 @@ void emitCOMStubCall (ComCallMethodDesc *pCOMMethodRX, ComCallMethodDesc *pCOMMe // nop 90 // call [$ - 10] ff 15 f0 ff ff ff - *((UINT64 *)&pBufferRW[COMMETHOD_CALL_PRESTUB_ADDRESS_OFFSET]) = (UINT64)target; + SET_UNALIGNED_64(&pBufferRW[COMMETHOD_CALL_PRESTUB_ADDRESS_OFFSET], target); pBufferRW[-2] = 0x90; pBufferRW[-1] = 0x90; @@ -459,7 +459,7 @@ void emitJump(LPBYTE pBufferRX, LPBYTE pBufferRW, LPVOID target) pBufferRW[0] = 0x48; pBufferRW[1] = 0xB8; - *((UINT64 UNALIGNED *)&pBufferRW[2]) = (UINT64)target; + SET_UNALIGNED_64(&pBufferRW[2], target); pBufferRW[10] = 0xFF; pBufferRW[11] = 0xE0; @@ -638,16 +638,16 @@ PCODE DynamicHelpers::CreateHelper(LoaderAllocator * pAllocator, TADDR arg, PCOD BEGIN_DYNAMIC_HELPER_EMIT(15); #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBF48; // mov rdi, XXXXXX + SET_UNALIGNED_16(p, 0xBF48); // mov rdi, XXXXXX #else - *(UINT16 *)p = 0xB948; // mov rcx, XXXXXX + SET_UNALIGNED_16(p, 0xB948); // mov rcx, XXXXXX #endif p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -665,16 +665,16 @@ void DynamicHelpers::EmitHelperWithArg(BYTE*& p, size_t rxOffset, LoaderAllocato // Move an argument into the second argument register and jump to a target function. #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBE48; // mov rsi, XXXXXX + SET_UNALIGNED_16(p, 0xBE48); // mov rsi, XXXXXX #else - *(UINT16 *)p = 0xBA48; // mov rdx, XXXXXX + SET_UNALIGNED_16(p, 0xBA48); // mov rdx, XXXXXX #endif p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator)); p += 4; } @@ -692,25 +692,25 @@ PCODE DynamicHelpers::CreateHelper(LoaderAllocator * pAllocator, TADDR arg, TADD BEGIN_DYNAMIC_HELPER_EMIT(25); #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBF48; // mov rdi, XXXXXX + SET_UNALIGNED_16(p, 0xBF48); // mov rdi, XXXXXX #else - *(UINT16 *)p = 0xB948; // mov rcx, XXXXXX + SET_UNALIGNED_16(p, 0xB948); // mov rcx, XXXXXX #endif p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBE48; // mov rsi, XXXXXX + SET_UNALIGNED_16(p, 0xBE48); // mov rsi, XXXXXX #else - *(UINT16 *)p = 0xBA48; // mov rdx, XXXXXX + SET_UNALIGNED_16(p, 0xBA48); // mov rdx, XXXXXX #endif p += 2; - *(TADDR *)p = arg2; + SET_UNALIGNED_64(p, arg2); p += 8; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -722,24 +722,24 @@ PCODE DynamicHelpers::CreateHelperArgMove(LoaderAllocator * pAllocator, TADDR ar #ifdef UNIX_AMD64_ABI *p++ = 0x48; // mov rsi, rdi - *(UINT16 *)p = 0xF78B; + SET_UNALIGNED_16(p, 0xF78B); #else *p++ = 0x48; // mov rdx, rcx - *(UINT16 *)p = 0xD18B; + SET_UNALIGNED_16(p, 0xD18B); #endif p += 2; #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBF48; // mov rdi, XXXXXX + SET_UNALIGNED_16(p, 0xBF48); // mov rdi, XXXXXX #else - *(UINT16 *)p = 0xB948; // mov rcx, XXXXXX + SET_UNALIGNED_16(p, 0xB948); // mov rcx, XXXXXX #endif p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -758,9 +758,9 @@ PCODE DynamicHelpers::CreateReturnConst(LoaderAllocator * pAllocator, TADDR arg) { BEGIN_DYNAMIC_HELPER_EMIT(11); - *(UINT16 *)p = 0xB848; // mov rax, XXXXXX + SET_UNALIGNED_16(p, 0xB848); // mov rax, XXXXXX p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; *p++ = 0xC3; // ret @@ -772,9 +772,9 @@ PCODE DynamicHelpers::CreateReturnIndirConst(LoaderAllocator * pAllocator, TADDR { BEGIN_DYNAMIC_HELPER_EMIT((offset != 0) ? 15 : 11); - *(UINT16 *)p = 0xA148; // mov rax, [XXXXXX] + SET_UNALIGNED_16(p, 0xA148); // mov rax, [XXXXXX] p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; if (offset != 0) @@ -796,16 +796,16 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD BEGIN_DYNAMIC_HELPER_EMIT(15); #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBA48; // mov rdx, XXXXXX + SET_UNALIGNED_16(p, 0xBA48); // mov rdx, XXXXXX #else - *(UINT16 *)p = 0xB849; // mov r8, XXXXXX + SET_UNALIGNED_16(p, 0xB849); // mov r8, XXXXXX #endif p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -816,25 +816,25 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD BEGIN_DYNAMIC_HELPER_EMIT(25); #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xBA48; // mov rdx, XXXXXX + SET_UNALIGNED_16(p, 0xBA48); // mov rdx, XXXXXX #else - *(UINT16 *)p = 0xB849; // mov r8, XXXXXX + SET_UNALIGNED_16(p, 0xB849); // mov r8, XXXXXX #endif p += 2; - *(TADDR *)p = arg; + SET_UNALIGNED_64(p, arg); p += 8; #ifdef UNIX_AMD64_ABI - *(UINT16 *)p = 0xB948; // mov rcx, XXXXXX + SET_UNALIGNED_16(p, 0xB948); // mov rcx, XXXXXX #else - *(UINT16 *)p = 0xB949; // mov r9, XXXXXX + SET_UNALIGNED_16(p, 0xB949); // mov r9, XXXXXX #endif p += 2; - *(TADDR *)p = arg2; + SET_UNALIGNED_64(p, arg2); p += 8; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target, NULL, pAllocator)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -885,9 +885,9 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, _ASSERTE(pLookup->testForNull && i > 0); // cmp qword ptr[rax + sizeOffset],slotOffset - *(UINT32*)p = 0x00b88148; p += 3; - *(UINT32*)p = (UINT32)pLookup->sizeOffset; p += 4; - *(UINT32*)p = (UINT32)slotOffset; p += 4; + SET_UNALIGNED_32(p, 0x00b88148); p += 3; + SET_UNALIGNED_32(p, (UINT32)pLookup->sizeOffset); p += 4; + SET_UNALIGNED_32(p, (UINT32)slotOffset); p += 4; // jle 'HELPER CALL' *p++ = 0x7e; @@ -901,24 +901,24 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, // mov rax,qword ptr [rdi+offset] if (pLookup->offsets[i] >= 0x80) { - *(UINT32*)p = 0x00878b48; p += 3; - *(UINT32*)p = (UINT32)pLookup->offsets[i]; p += 4; + SET_UNALIGNED_32(p, 0x00878b48); p += 3; + SET_UNALIGNED_32(p, (UINT32)pLookup->offsets[i]); p += 4; } else { - *(UINT32*)p = 0x00478b48; p += 3; + SET_UNALIGNED_32(p, 0x00478b48); p += 3; *p++ = (BYTE)pLookup->offsets[i]; } #else // mov rax,qword ptr [rcx+offset] if (pLookup->offsets[i] >= 0x80) { - *(UINT32*)p = 0x00818b48; p += 3; - *(UINT32*)p = (UINT32)pLookup->offsets[i]; p += 4; + SET_UNALIGNED_32(p, 0x00818b48); p += 3; + SET_UNALIGNED_32(p, (UINT32)pLookup->offsets[i]); p += 4; } else { - *(UINT32*)p = 0x00418b48; p += 3; + SET_UNALIGNED_32(p, 0x00418b48); p += 3; *p++ = (BYTE)pLookup->offsets[i]; } #endif @@ -928,12 +928,12 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, // mov rax,qword ptr [rax+offset] if (pLookup->offsets[i] >= 0x80) { - *(UINT32*)p = 0x00808b48; p += 3; - *(UINT32*)p = (UINT32)pLookup->offsets[i]; p += 4; + SET_UNALIGNED_32(p, 0x00808b48); p += 3; + SET_UNALIGNED_32(p, (UINT32)pLookup->offsets[i]); p += 4; } else { - *(UINT32*)p = 0x00408b48; p += 3; + SET_UNALIGNED_32(p, 0x00408b48); p += 3; *p++ = (BYTE)pLookup->offsets[i]; } } @@ -953,10 +953,10 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, _ASSERTE(pLookup->indirections != 0); - *(UINT32*)p = 0x00c08548; p += 3; // test rax,rax + SET_UNALIGNED_32(p, 0x00c08548); p += 3; // test rax,rax // je 'HELPER_CALL' (a jump of 1 byte) - *(UINT16*)p = 0x0174; p += 2; + SET_UNALIGNED_16(p, 0x0174); p += 2; *p++ = 0xC3; // ret diff --git a/src/coreclr/vm/i386/cgenx86.cpp b/src/coreclr/vm/i386/cgenx86.cpp index 394619c7f22054..98c845c00e14b7 100644 --- a/src/coreclr/vm/i386/cgenx86.cpp +++ b/src/coreclr/vm/i386/cgenx86.cpp @@ -786,11 +786,11 @@ PCODE DynamicHelpers::CreateHelper(LoaderAllocator * pAllocator, TADDR arg, PCOD BEGIN_DYNAMIC_HELPER_EMIT(10); *p++ = 0xB9; // mov ecx, XXXXXX - *(INT32 *)p = (INT32)arg; + SET_UNALIGNED_32(p, (INT32)arg); p += 4; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -808,11 +808,11 @@ void DynamicHelpers::EmitHelperWithArg(BYTE*& p, size_t rxOffset, LoaderAllocato // Move an argument into the second argument register and jump to a target function. *p++ = 0xBA; // mov edx, XXXXXX - *(INT32 *)p = (INT32)arg; + SET_UNALIGNED_32(p, (INT32)arg); p += 4; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target)); p += 4; } @@ -830,15 +830,15 @@ PCODE DynamicHelpers::CreateHelper(LoaderAllocator * pAllocator, TADDR arg, TADD BEGIN_DYNAMIC_HELPER_EMIT(15); *p++ = 0xB9; // mov ecx, XXXXXX - *(INT32 *)p = (INT32)arg; + SET_UNALIGNED_32(p, (INT32)arg); p += 4; *p++ = 0xBA; // mov edx, XXXXXX - *(INT32 *)p = (INT32)arg2; + SET_UNALIGNED_32(p, (INT32)arg2); p += 4; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -848,15 +848,15 @@ PCODE DynamicHelpers::CreateHelperArgMove(LoaderAllocator * pAllocator, TADDR ar { BEGIN_DYNAMIC_HELPER_EMIT(12); - *(UINT16 *)p = 0xD18B; // mov edx, ecx + SET_UNALIGNED_16(p, 0xD18B); // mov edx, ecx p += 2; *p++ = 0xB9; // mov ecx, XXXXXX - *(INT32 *)p = (INT32)arg; + SET_UNALIGNED_32(p, (INT32)arg); p += 4; *p++ = X86_INSTR_JMP_REL32; // jmp rel32 - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target)); p += 4; END_DYNAMIC_HELPER_EMIT(); @@ -876,7 +876,7 @@ PCODE DynamicHelpers::CreateReturnConst(LoaderAllocator * pAllocator, TADDR arg) BEGIN_DYNAMIC_HELPER_EMIT(6); *p++ = 0xB8; // mov eax, XXXXXX - *(INT32 *)p = (INT32)arg; + SET_UNALIGNED_32(p, (INT32)arg); p += 4; *p++ = 0xC3; // ret @@ -889,7 +889,7 @@ PCODE DynamicHelpers::CreateReturnIndirConst(LoaderAllocator * pAllocator, TADDR BEGIN_DYNAMIC_HELPER_EMIT((offset != 0) ? 9 : 6); *p++ = 0xA1; // mov eax, [XXXXXX] - *(INT32 *)p = (INT32)arg; + SET_UNALIGNED_32(p, (INT32)arg); p += 4; if (offset != 0) @@ -927,13 +927,13 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD // push arg *p++ = 0x68; - *(INT32 *)p = arg; + SET_UNALIGNED_32(p, arg); p += 4; #ifdef UNIX_X86_ABI // mov eax, target *p++ = 0xB8; - *(INT32 *)p = target; + SET_UNALIGNED_32(p, target); p += 4; #else // push eax @@ -942,9 +942,9 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD *p++ = X86_INSTR_JMP_REL32; // jmp rel32 #ifdef UNIX_X86_ABI - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), (PCODE)DynamicHelperArgsStub); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), (PCODE)DynamicHelperArgsStub)); #else - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target)); #endif p += 4; @@ -971,18 +971,18 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD // push arg *p++ = 0x68; - *(INT32 *)p = arg; + SET_UNALIGNED_32(p, arg); p += 4; // push arg2 *p++ = 0x68; - *(INT32 *)p = arg2; + SET_UNALIGNED_32(p, arg2); p += 4; #ifdef UNIX_X86_ABI // mov eax, target *p++ = 0xB8; - *(INT32 *)p = target; + SET_UNALIGNED_32(p, target); p += 4; #else // push eax @@ -991,9 +991,9 @@ PCODE DynamicHelpers::CreateHelperWithTwoArgs(LoaderAllocator * pAllocator, TADD *p++ = X86_INSTR_JMP_REL32; // jmp rel32 #ifdef UNIX_X86_ABI - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), (PCODE)DynamicHelperArgsStub); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), (PCODE)DynamicHelperArgsStub)); #else - *(INT32 *)p = rel32UsingJumpStub((INT32 *)(p + rxOffset), target); + SET_UNALIGNED_32(p, rel32UsingJumpStub((INT32 *)(p + rxOffset), target)); #endif p += 4; @@ -1045,9 +1045,9 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, _ASSERTE(pLookup->testForNull && i > 0); // cmp dword ptr[eax + sizeOffset],slotOffset - *(UINT16*)p = 0xb881; p += 2; - *(UINT32*)p = (UINT32)pLookup->sizeOffset; p += 4; - *(UINT32*)p = (UINT32)slotOffset; p += 4; + SET_UNALIGNED_16(p, 0xb881); p += 2; + SET_UNALIGNED_32(p, (UINT32)pLookup->sizeOffset); p += 4; + SET_UNALIGNED_32(p, (UINT32)slotOffset); p += 4; // jle 'HELPER CALL' *p++ = 0x7e; @@ -1058,12 +1058,12 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, // mov eax,dword ptr [ecx|eax + offset] if (pLookup->offsets[i] >= 0x80) { - *(UINT16*)p = (i == 0 ? 0x818b : 0x808b); p += 2; - *(UINT32*)p = (UINT32)pLookup->offsets[i]; p += 4; + SET_UNALIGNED_16(p, (i == 0 ? 0x818b : 0x808b)); p += 2; + SET_UNALIGNED_32(p, (UINT32)pLookup->offsets[i]); p += 4; } else { - *(UINT16*)p = (i == 0 ? 0x418b : 0x408b); p += 2; + SET_UNALIGNED_16(p, (i == 0 ? 0x418b : 0x408b)); p += 2; *p++ = (BYTE)pLookup->offsets[i]; } } @@ -1083,10 +1083,10 @@ PCODE DynamicHelpers::CreateDictionaryLookupHelper(LoaderAllocator * pAllocator, _ASSERTE(pLookup->indirections != 0); // test eax,eax - *(UINT16*)p = 0xc085; p += 2; + SET_UNALIGNED_16(p, 0xc085); p += 2; // je 'HELPER_CALL' (a jump of 1 byte) - *(UINT16*)p = 0x0174; p += 2; + SET_UNALIGNED_16(p, 0x0174); p += 2; *p++ = 0xC3; // ret