Changeset 260310 in webkit for trunk/Source/JavaScriptCore/offlineasm/mips.rb
- Timestamp:
- Apr 18, 2020, 7:59:11 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/offlineasm/mips.rb
r260309 r260310 555 555 end 556 556 557 def mipsAsRegister(preList, postList, operand, needRestore) 558 tmp = MIPS_CALL_REG 559 if operand.address? 560 preList << Instruction.new(operand.codeOrigin, "loadp", [operand, MIPS_CALL_REG]) 561 elsif operand.is_a? LabelReference 562 preList << Instruction.new(operand.codeOrigin, "la", [operand, MIPS_CALL_REG]) 563 elsif operand.register? and operand != MIPS_CALL_REG 564 preList << Instruction.new(operand.codeOrigin, "move", [operand, MIPS_CALL_REG]) 565 else 566 needRestore = false 567 tmp = operand 568 end 569 if needRestore 570 postList << Instruction.new(operand.codeOrigin, "move", [MIPS_GPSAVE_REG, MIPS_GP_REG]) 571 end 572 tmp 557 class Instruction 558 # Replace operands with a single register operand. 559 # Note: in contrast to the risc version, this method drops all other operands. 560 def mipsCloneWithOperandLowered(preList, postList, operandIndex, needRestore) 561 operand = self.operands[operandIndex] 562 tmp = MIPS_CALL_REG 563 if operand.address? 564 preList << Instruction.new(self.codeOrigin, "loadp", [operand, MIPS_CALL_REG]) 565 elsif operand.is_a? LabelReference 566 preList << Instruction.new(self.codeOrigin, "la", [operand, MIPS_CALL_REG]) 567 elsif operand.register? and operand != MIPS_CALL_REG 568 preList << Instruction.new(self.codeOrigin, "move", [operand, MIPS_CALL_REG]) 569 else 570 needRestore = false 571 tmp = operand 572 end 573 if needRestore 574 postList << Instruction.new(self.codeOrigin, "move", [MIPS_GPSAVE_REG, MIPS_GP_REG]) 575 end 576 cloneWithNewOperands([tmp]) 577 end 573 578 end 574 579 … … 582 587 case node.opcode 583 588 when "jmp" 584 newList << Instruction.new(node.codeOrigin, 585 node.opcode, 586 [mipsAsRegister(newList, [], node.operands[0], false)]) 589 newList << node.mipsCloneWithOperandLowered(newList, [], 0, false) 587 590 when "call" 588 newList << Instruction.new(node.codeOrigin, 589 node.opcode, 590 [mipsAsRegister(newList, postInstructions, node.operands[0], true)]) 591 newList << node.mipsCloneWithOperandLowered(newList, postInstructions, 0, true) 591 592 when "slt", "sltu" 592 newList << Instruction.new(node.codeOrigin, 593 node.opcode, 594 riscAsRegisters(newList, [], node.operands, "i")) 593 newList << node.riscCloneWithOperandsLowered(newList, [], "i") 595 594 when "sltub", "sltb" 596 newList << Instruction.new(node.codeOrigin, 597 node.opcode, 598 riscAsRegisters(newList, [], node.operands, "b")) 595 newList << node.riscCloneWithOperandsLowered(newList, [], "b") 599 596 when "andb" 600 597 newList << Instruction.new(node.codeOrigin, 601 598 "andi", 602 riscAsRegisters(newList, [], node.operands, "b")) 599 riscLowerOperandsToRegisters(node, newList, [], "b"), 600 node.annotation) 603 601 when /^(bz|bnz|bs|bo)/ 604 602 tl = $~.post_match == "" ? "i" : $~.post_match 605 newList << Instruction.new(node.codeOrigin, 606 node.opcode, 607 riscAsRegisters(newList, [], node.operands, tl)) 603 newList << node.riscCloneWithOperandsLowered(newList, [], tl) 608 604 else 609 605 newList << node
Note:
See TracChangeset
for help on using the changeset viewer.