# This file is part of Metasm, the Ruby assembly manipulation suite # Copyright (C) 2006-2009 Yoann GUILLOT # # Licence is LGPL, see LICENCE in the top-level directory require 'metasm/render' require 'metasm/cpu/arm/opcodes' module Metasm class ARM class Reg include Renderable def render r = self.class.i_to_s[@i] r += '!' if updated if @stype == :lsl and @shift == 0 [r] elsif @stype == :ror and @shift == 0 ["#{r} RRX"] else case s = @shift when Integer; s = Expression[s == 0 ? 32 : s] # lsl and ror already accounted for when Reg; s = self.class.i_to_s[s.i] end ["#{r} #{@stype.to_s.upcase} #{s}"] end end end class Memref include Renderable def render o = @offset o = Expression[o] if o.kind_of? Integer case @incr when nil; ['[', @base, ', ', o, ']'] when :pre; ['[', @base, ', ', o, ']!'] when :post; ['[', @base, '], ', o] end end end class RegList include Renderable def render r = ['{'] @list.each { |l| r << l << ', ' } r[-1] = '}' r << '^' if usermoderegs r end end end end