diff options
Diffstat (limited to 'src/arch/arm/v7/opdefs/mov_A88103.d')
-rw-r--r-- | src/arch/arm/v7/opdefs/mov_A88103.d | 68 |
1 files changed, 29 insertions, 39 deletions
diff --git a/src/arch/arm/v7/opdefs/mov_A88103.d b/src/arch/arm/v7/opdefs/mov_A88103.d index d1f9b9c..cd3d75a 100644 --- a/src/arch/arm/v7/opdefs/mov_A88103.d +++ b/src/arch/arm/v7/opdefs/mov_A88103.d @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * ##FILE## - traduction d'instructions ARMv7 * - * Copyright (C) 2014 Cyrille Bagard + * Copyright (C) 2015 Cyrille Bagard * * This file is part of Chrysalide. * @@ -23,68 +23,58 @@ @title MOV (register, Thumb) -@encoding(t1) { +@desc Move (register) copies a value from a register to the destination register. It can optionally update the condition flags based on the value. - @half 0 1 0 0 0 1 1 0 D(1) Rm(4) Rd(3) +@encoding (t1) { - @syntax <Rgd> <Rgm> + @half 0 1 0 0 0 1 1 0 D(1) Rm(4) Rd(3) - @conv { + @syntax <reg_D> <reg_M> - Rgd = Register(D:Rd) - Rgm = Register(Rm) + @conv { - } + reg_D = Register(D:Rd) + reg_M = Register(Rm) - @rules { - - //if d == 15 && InITBlock() && !LastInITBlock() then UNPREDICTABLE; - - } + } } -@encoding(t2) { - - @half 0 0 0 0 0 0 0 0 0 0 Rm(3) Rd(3) +@encoding (t2) { - @syntax <Rgd> <Rgm> + @half 0 0 0 0 0 0 0 0 0 0 Rm(3) Rd(3) - @conv { + @syntax "movs" <reg_D> <reg_M> - S = SetFlags(1) - Rgd = Register(Rd) - Rgm = Register(Rm) + @conv { - } + reg_D = Register(Rd) + reg_M = Register(Rm) - @rules { - - //if InITBlock() then UNPREDICTABLE; - - } + } } -@encoding(T3) { +@encoding (T3) { - @word 1 1 1 0 1 0 1 0 0 1 0 S(1) 1 1 1 1 0 0 0 0 Rd(4) 0 0 0 0 Rm(4) + @word 1 1 1 0 1 0 1 0 0 1 0 S(1) 1 1 1 1 0 0 0 0 Rd(4) 0 0 0 0 Rm(4) - @syntax {S} <Rgd> <Rgm> + @syntax <reg_D> <reg_M> - @conv { + @conv { - S = SetFlags(S) - Rgd = Register(Rd) - Rgm = Register(Rm) + reg_D = Register(Rd) + reg_M = Register(Rm) + setflags = (S == '1') - } + } - @rules { + @rules { - //if setflags && (d IN {13,15} || m IN {13,15}) then UNPREDICTABLE; - //if !setflags && (d == 15 || m == 15 || (d == 13 && m == 13)) then UNPREDICTABLE; + if (setflags); chk_call ExtendKeyword("s") + chk_call ExtendKeyword(".w") - } + } } + |