Don't break strict aliasing.
authorEvan Cheng <evan.cheng@apple.com>
Thu, 5 Jun 2008 22:59:21 +0000 (22:59 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 5 Jun 2008 22:59:21 +0000 (22:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52026 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86JITInfo.cpp

index 0ca93d9e92fff26e8f59fcaeb142b0b38a7ccba3..9aff83a5a409daafae82bee1a92f637ada195c6f 100644 (file)
@@ -396,8 +396,8 @@ void *X86JITInfo::emitGlobalValueLazyPtr(const GlobalValue* GV, void *ptr,
                                          MachineCodeEmitter &MCE) {
 #if defined (X86_64_JIT)
   MCE.startFunctionStub(GV, 8, 8);
-  MCE.emitWordLE(((unsigned *)&ptr)[0]);
-  MCE.emitWordLE(((unsigned *)&ptr)[1]);
+  MCE.emitWordLE((unsigned)(intptr_t)ptr);
+  MCE.emitWordLE((unsigned)(((intptr_t)ptr) >> 32));
 #else
   MCE.startFunctionStub(GV, 4, 4);
   MCE.emitWordLE((intptr_t)ptr);
@@ -420,8 +420,8 @@ void *X86JITInfo::emitFunctionStub(const Function* F, void *Fn,
     MCE.startFunctionStub(F, 13, 4);
     MCE.emitByte(0x49);          // REX prefix
     MCE.emitByte(0xB8+2);        // movabsq r10
-    MCE.emitWordLE(((unsigned *)&Fn)[0]);
-    MCE.emitWordLE(((unsigned *)&Fn)[1]);
+    MCE.emitWordLE((unsigned)(intptr_t)Fn);
+    MCE.emitWordLE((unsigned)(((intptr_t)Fn) >> 32));
     MCE.emitByte(0x41);          // REX prefix
     MCE.emitByte(0xFF);          // jmpq *r10
     MCE.emitByte(2 | (4 << 3) | (3 << 6));
@@ -437,8 +437,8 @@ void *X86JITInfo::emitFunctionStub(const Function* F, void *Fn,
   MCE.startFunctionStub(F, 14, 4);
   MCE.emitByte(0x49);          // REX prefix
   MCE.emitByte(0xB8+2);        // movabsq r10
-  MCE.emitWordLE(((unsigned *)&Fn)[0]);
-  MCE.emitWordLE(((unsigned *)&Fn)[1]);
+  MCE.emitWordLE((unsigned)(intptr_t)Fn);
+  MCE.emitWordLE((unsigned)(((intptr_t)Fn) >> 32));
   MCE.emitByte(0x41);          // REX prefix
   MCE.emitByte(0xFF);          // callq *r10
   MCE.emitByte(2 | (2 << 3) | (3 << 6));