@@ -2354,12 +2354,35 @@ int IR_Builder::translateVISACFSymbolInst(const std::string& symbolName, G4_DstR
23542354 startTimer (TIMER_VISA_BUILDER_IR_CONSTRUCTION);
23552355#endif
23562356
2357- // symbolic imm representing symbol's address
2358- auto funcAddr = createRelocImm (Type_UQ);
2359- auto movInst = createInst (nullptr , G4_mov, nullptr , false , 1 , dst, funcAddr, nullptr , InstOpt_WriteEnable);
2357+ if (no64bitType ())
2358+ {
2359+ auto * funcAddrLow = createRelocImm (Type_UD);
2360+ auto * funcAddrHigh = createRelocImm (Type_UD);
2361+
2362+ dst->setType (Type_UD);
2363+ G4_INST* movLo = createInst (nullptr , G4_mov, nullptr , false , 1 , dst, funcAddrLow, nullptr , InstOpt_WriteEnable);
2364+ G4_DstRegRegion* tempDst = createDstRegRegion (*dst);
2365+
2366+ tempDst->setSubRegOff (1 );
2367+ tempDst->setType (Type_UD);
2368+ G4_INST* movHi = createInst (nullptr , G4_mov, nullptr , false , 1 , tempDst, funcAddrHigh, nullptr , InstOpt_WriteEnable);
2369+
2370+ RelocationEntry relocEntryLo = RelocationEntry::createSymbolAddrReloc (movLo, 0 , symbolName, GenRelocType::R_SYM_ADDR_32);
2371+ kernel.addRelocation (relocEntryLo);
2372+
2373+ RelocationEntry relocEntryHi = RelocationEntry::createSymbolAddrReloc (movHi, 0 , symbolName, GenRelocType::R_SYM_ADDR_32_HI);
2374+ kernel.addRelocation (relocEntryHi);
23602375
2361- RelocationEntry relocEntry = RelocationEntry::createSymbolAddrReloc (movInst, 0 , symbolName);
2362- kernel.addRelocation (relocEntry);
2376+ }
2377+ else
2378+ {
2379+ // symbolic imm representing symbol's address
2380+ auto funcAddr = createRelocImm (Type_UQ);
2381+ auto movInst = createInst (nullptr , G4_mov, nullptr , false , 1 , dst, funcAddr, nullptr , InstOpt_WriteEnable);
2382+
2383+ RelocationEntry relocEntry = RelocationEntry::createSymbolAddrReloc (movInst, 0 , symbolName, GenRelocType::R_SYM_ADDR);
2384+ kernel.addRelocation (relocEntry);
2385+ }
23632386
23642387#if defined(MEASURE_COMPILATION_TIME) && defined(TIME_IR_CONSTRUCTION)
23652388 stopTimer (TIMER_VISA_BUILDER_IR_CONSTRUCTION);
0 commit comments