Changeset 175514 in webkit for trunk/Source/JavaScriptCore/offlineasm/arm64.rb
- Timestamp:
- Nov 3, 2014, 11:36:15 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/offlineasm/arm64.rb
r173497 r175514 229 229 end 230 230 231 # Workaround for Cortex-A53 erratum (835769) 232 def arm64CortexA53Fix835769(list) 233 newList = [] 234 lastOpcodeUnsafe = false 235 236 list.each { 237 | node | 238 if node.is_a? Instruction 239 case node.opcode 240 when /^store/, /^load/ 241 # List all macro instructions that can be lowered to a load, store or prefetch ARM64 assembly instruction 242 lastOpcodeUnsafe = true 243 when "muli", "mulp", "mulq", "smulli" 244 # List all macro instructions that can be lowered to a 64-bit multiply-accumulate ARM64 assembly instruction 245 # (defined as one of MADD, MSUB, SMADDL, SMSUBL, UMADDL or UMSUBL). 246 if lastOpcodeUnsafe 247 newList << Instruction.new(node.codeOrigin, "nopCortexA53Fix835769", []) 248 end 249 lastOpcodeUnsafe = false 250 else 251 lastOpcodeUnsafe = false 252 end 253 end 254 newList << node 255 } 256 newList 257 end 258 231 259 class Sequence 232 260 def getModifiedListARM64 … … 285 313 result = assignRegistersToTemporaries(result, :gpr, ARM64_EXTRA_GPRS) 286 314 result = assignRegistersToTemporaries(result, :fpr, ARM64_EXTRA_FPRS) 315 result = arm64CortexA53Fix835769(result) 287 316 return result 288 317 end … … 838 867 $asm.puts "dmb sy" 839 868 when "pcrtoaddr" 840 $asm.puts "adr #{operands[1].arm64Operand(:ptr)}, #{operands[0].value}" 869 $asm.puts "adr #{operands[1].arm64Operand(:ptr)}, #{operands[0].value}" 870 when "nopCortexA53Fix835769" 871 $asm.putStr("#if CPU(ARM64_CORTEXA53)") 872 $asm.puts "nop" 873 $asm.putStr("#endif") 841 874 else 842 875 lowerDefault
Note:
See TracChangeset
for help on using the changeset viewer.