use arm shift at runtime

arm indexes are in bytes (x4) at compile time
but at runtime we only have the array indexes, iw word indexes
arm has the nice barrel shifter to save us an extra instruction
This commit is contained in:
Torsten Ruger 2015-11-19 12:48:13 +02:00
parent 4871a52d37
commit a8453c126d
2 changed files with 3 additions and 5 deletions

View File

@ -1,6 +1,6 @@
GIT GIT
remote: git://github.com/salama/salama-arm.git remote: git://github.com/salama/salama-arm.git
revision: 0a950de25a9d286fccf7d33834534a0c3a6d2682 revision: 00beb3703b57702e6d8d4743abf7eac2504a3c83
specs: specs:
salama-arm (0.3.0) salama-arm (0.3.0)

View File

@ -38,20 +38,18 @@ module Arm
end end
def translate_GetSlot code def translate_GetSlot code
# times 4 because arm works in bytes, but vm in words
if(code.index.is_a? Numeric) if(code.index.is_a? Numeric)
ArmMachine.ldr( code.register , code.array , arm_index(code) ) ArmMachine.ldr( code.register , code.array , arm_index(code) )
else else
ArmMachine.ldr( code.register , code.array , code.index ) ArmMachine.ldr( code.register , code.array , code.index , :shift_lsl => 2 )
end end
end end
def translate_SetSlot code def translate_SetSlot code
# times 4 because arm works in bytes, but vm in words
if(code.index.is_a? Numeric) if(code.index.is_a? Numeric)
ArmMachine.str( code.register , code.array , arm_index(code) ) ArmMachine.str( code.register , code.array , arm_index(code) )
else else
ArmMachine.str( code.register , code.array , code.index ) ArmMachine.str( code.register , code.array , code.index , :shift_lsl => 2 )
end end
end end