From bc425620d469b437c3045ddf383a54920e1bea03 Mon Sep 17 00:00:00 2001 From: "commit-queue@webkit.org" Date: Mon, 16 Sep 2013 09:05:38 +0000 Subject: [sh4] Handle subp opcode with 3 operands and bpbeq opcode in LLINT. https://bugs.webkit.org/show_bug.cgi?id=121412 Patch by Julien Brianceau on 2013-09-16 Reviewed by Andreas Kling. * offlineasm/sh4.rb: Change-Id: I4c0cbe22fb409b8d0d20c4c498b13a7e0ff870d0 git-svn-id: http://svn.webkit.org/repository/webkit/trunk@155846 268f45cc-cd09-0410-ab3c-d52691b4dbfc Reviewed-by: Allan Sandfeld Jensen --- Source/JavaScriptCore/offlineasm/sh4.rb | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'Source/JavaScriptCore/offlineasm') diff --git a/Source/JavaScriptCore/offlineasm/sh4.rb b/Source/JavaScriptCore/offlineasm/sh4.rb index 57223c826..3abfd3484 100644 --- a/Source/JavaScriptCore/offlineasm/sh4.rb +++ b/Source/JavaScriptCore/offlineasm/sh4.rb @@ -570,11 +570,20 @@ class Instruction $asm.puts "add #{sh4Operands(operands)}" end when "subi", "subp" - raise "#{opcode} with #{operands.size} operands is not handled yet" unless operands.size == 2 - if operands[0].is_a? Immediate - $asm.puts "add #{sh4Operands([Immediate.new(codeOrigin, -1 * operands[0].value), operands[1]])}" + if operands.size == 3 + if operands[1] != operands[2] + $asm.puts "neg #{sh4Operands([operands[2], operands[2]])}" + $asm.puts "add #{sh4Operands([operands[0], operands[2]])}" + else + $asm.puts "mov #{sh4Operands([operands[0], operands[2]])}" + $asm.puts "sub #{sh4Operands([operands[1], operands[2]])}" + end else - $asm.puts "sub #{sh4Operands(operands)}" + if operands[0].is_a? Immediate + $asm.puts "add #{sh4Operands([Immediate.new(codeOrigin, -1 * operands[0].value), operands[1]])}" + else + $asm.puts "sub #{sh4Operands(operands)}" + end end when "muli", "mulp" $asm.puts "mul.l #{sh4Operands(operands[0..1])}" @@ -681,6 +690,8 @@ class Instruction emitSH4CondBranch("hs", true, operands) when "bia", "bpa", "bba" emitSH4CondBranch("hi", false, operands) + when "bibeq", "bpbeq" + emitSH4CondBranch("hi", true, operands) when "biaeq", "bpaeq" emitSH4CondBranch("hs", false, operands) when "bigteq", "bpgteq", "bbgteq" -- cgit v1.2.1