Ignore:
Timestamp:
Nov 16, 2013, 2:28:27 PM (12 years ago)
Author:
[email protected]
Message:

[sh4] Fix build (broken since r159346).
https://bugs.webkit.org/show_bug.cgi?id=124455

Patch by Julien Brianceau <[email protected]> on 2013-11-16
Reviewed by Oliver Hunt.

Fix LLINT implementation for sh4 architecture to handle properly load and store operations with pr register.

  • offlineasm/sh4.rb:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/offlineasm/sh4.rb

    r159288 r159381  
    459459                    newList << Instruction.new(codeOrigin, "move", [node.operands[0], tmp])
    460460                    newList << Instruction.new(codeOrigin, node.opcode, [tmp])
     461                else
     462                    newList << node
     463                end
     464            else
     465                newList << node
     466            end
     467        else
     468            newList << node
     469        end
     470    }
     471    newList
     472end
     473
     474
     475#
     476# Lowering of misplaced special registers for SH4. For example:
     477#
     478# storep pr, foo
     479#
     480# becomes:
     481#
     482# stspr tmp
     483# storep tmp, foo
     484#
     485
     486def sh4LowerMisplacedSpecialRegisters(list)
     487    newList = []
     488    list.each {
     489        | node |
     490        if node.is_a? Instruction
     491            case node.opcode
     492            when "loadi", "loadis", "loadp"
     493                if node.operands[1].is_a? RegisterID and node.operands[1].sh4Operand == "pr"
     494                    tmp = Tmp.new(codeOrigin, :gpr)
     495                    newList << Instruction.new(codeOrigin, node.opcode, [node.operands[0], tmp])
     496                    newList << Instruction.new(codeOrigin, "ldspr", [tmp])
     497                else
     498                    newList << node
     499                end
     500            when "storei", "storep"
     501                if node.operands[0].is_a? RegisterID and node.operands[0].sh4Operand == "pr"
     502                    tmp = Tmp.new(codeOrigin, :gpr)
     503                    newList << Instruction.new(codeOrigin, "stspr", [tmp])
     504                    newList << Instruction.new(codeOrigin, node.opcode, [tmp, node.operands[1]])
    461505                else
    462506                    newList << node
     
    681725        result = sh4LowerMisplacedLabels(result)
    682726        result = riscLowerMisplacedAddresses(result)
     727        result = sh4LowerMisplacedSpecialRegisters(result)
    683728
    684729        result = assignRegistersToTemporaries(result, :gpr, SH4_TMP_GPRS)
Note: See TracChangeset for help on using the changeset viewer.