diff options
Diffstat (limited to 'plugins/arm/v7/opdefs/cb_A8829.d')
| -rw-r--r-- | plugins/arm/v7/opdefs/cb_A8829.d | 47 | 
1 files changed, 37 insertions, 10 deletions
| diff --git a/plugins/arm/v7/opdefs/cb_A8829.d b/plugins/arm/v7/opdefs/cb_A8829.d index 134e0f4..3ac923a 100644 --- a/plugins/arm/v7/opdefs/cb_A8829.d +++ b/plugins/arm/v7/opdefs/cb_A8829.d @@ -2,7 +2,7 @@  /* Chrysalide - Outil d'analyse de fichiers binaires   * ##FILE## - traduction d'instructions ARMv7   * - * Copyright (C) 2015 Cyrille Bagard + * Copyright (C) 2017 Cyrille Bagard   *   *  This file is part of Chrysalide.   * @@ -23,26 +23,53 @@  @title CBNZ, CBZ -@desc Compare and Branch on Nonzero and Compare and Branch on Zero compare the value in a register with zero, and conditionally branch forward a constant value. They do not affect the condition flags. +@id 28 + +@desc { + +	Compare and Branch on Nonzero and Compare and Branch on Zero compare the value in a register with zero, and conditionally branch forward a constant value. They do not affect the condition flags. + +}  @encoding (t1) {  	@half 1 0 1 1 op(1) 0 i(1) 1 imm5(5) Rn(3) -	@syntax <reg_N> <imm32> +	@syntax { + +		@assert { + +			op == 0 + +		} + +		@conv { -	@conv { +			reg_N = Register(Rn) +			imm32 = ZeroExtend(i:imm5:'0', 32) -		reg_N = Register(Rn) -		imm32 = ZeroExtend(i:imm5:'0', 32) -		nonzero = (op == '1') +		} + +		@asm cbz reg_N imm32  	} -	@rules { +	@syntax { + +		@assert { + +			op == 1 + +		} + +		@conv { + +			reg_N = Register(Rn) +			imm32 = ZeroExtend(i:imm5:'0', 32) + +		} -		if (nonzero); chk_call ExtendKeyword("n") -		chk_call ExtendKeyword("z") +		@asm cbnz reg_N imm32  	} | 
