Changeset 223239 in webkit for trunk/Source/JavaScriptCore/offlineasm/arm64.rb
- Timestamp:
- Oct 12, 2017, 9:02:45 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/offlineasm/arm64.rb
r223202 r223239 261 261 end 262 262 263 def arm64LowerLabelReferences(list) 264 newList = [] 265 list.each { 266 | node | 267 if node.is_a? Instruction 268 case node.opcode 269 when "loadi", "loadis", "loadp", "loadq", "loadb", "loadbs", "loadh", "loadhs" 270 labelRef = node.operands[0] 271 if labelRef.is_a? LabelReference 272 tmp = Tmp.new(node.codeOrigin, :gpr) 273 newList << Instruction.new(codeOrigin, "globaladdr", [LabelReference.new(node.codeOrigin, labelRef.label), tmp]) 274 newList << Instruction.new(codeOrigin, node.opcode, [Address.new(node.codeOrigin, tmp, Immediate.new(node.codeOrigin, labelRef.offset)), node.operands[1]]) 275 else 276 newList << node 277 end 278 else 279 newList << node 280 end 281 else 282 newList << node 283 end 284 } 285 newList 286 end 287 263 288 # Workaround for Cortex-A53 erratum (835769) 264 289 def arm64CortexA53Fix835769(list) … … 297 322 result = riscLowerShiftOps(result) 298 323 result = arm64LowerMalformedLoadStoreAddresses(result) 324 result = arm64LowerLabelReferences(result) 299 325 result = riscLowerMalformedAddresses(result) { 300 326 | node, address | … … 905 931 $asm.puts "nop" 906 932 $asm.putStr("#endif") 933 when "globaladdr" 934 uid = $asm.newUID 935 $asm.puts "L_offlineasm_loh_adrp_#{uid}:" 936 $asm.puts "adrp #{operands[1].arm64Operand(:ptr)}, #{operands[0].asmLabel}@GOTPAGE" 937 $asm.puts "L_offlineasm_loh_ldr_#{uid}:" 938 $asm.puts "ldr #{operands[1].arm64Operand(:ptr)}, [#{operands[1].arm64Operand(:ptr)}, #{operands[0].asmLabel}@GOTPAGEOFF]" 939 $asm.deferAction { 940 $asm.puts ".loh AdrpLdrGot L_offlineasm_loh_adrp_#{uid}, L_offlineasm_loh_ldr_#{uid}" 941 } 907 942 else 908 943 lowerDefault
Note:
See TracChangeset
for help on using the changeset viewer.