small step to making the assmebly process repeatable (is destructive at the moment)
This commit is contained in:
@@ -92,6 +92,7 @@ module Arm
|
||||
#slighly wrong place for this code, but since the module gets included in instructions anyway . . .
|
||||
# implement the barrel shifter on the operand (which is set up before as an integer)
|
||||
def shift_handling
|
||||
op = 0
|
||||
#codes that one can shift, first two probably most common.
|
||||
# l (in lsr) means logical, ie unsigned, a (in asr) is arithmetic, ie signed
|
||||
{'lsl' => 0b000, 'lsr' => 0b010, 'asr' => 0b100, 'ror' => 0b110, 'rrx' => 0b110}.each do |short, bin|
|
||||
@@ -104,11 +105,12 @@ module Arm
|
||||
shift = shif.register << 1
|
||||
end
|
||||
raise "0 < shift <= 32 #{shif} #{inspect}" if (shif >= 32) or( shif < 0)
|
||||
@operand |= shift(bin , 4 )
|
||||
@operand |= shift(shif , 4+3)
|
||||
op |= shift(bin , 4 )
|
||||
op |= shift(shif , 4+3)
|
||||
break
|
||||
end
|
||||
end
|
||||
return op
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user