CPUSHxx pushes the following boolean condition on top of the stack:
Stack after CPUSHxx:
 |
High Condition |
Low Condition |
 |
[Rs0]*[Rs1] op [Rs2] |
[Rs0]*[Rs1] op [Rs2] |
 |
Note: [Rs] denotes the complex representation of the data on both banks of register RsX,
i.e., [R] = (data on low bank) + i (data on high bank); and op depends on the relation:
- For EQ, op is ==
- For NE, op is !=
Comparison is done through complex normal operations. It is customary to have
in the relevant banks of Rs0 the value 1.0+i0.0, i.e.:
- [Rs0].L = 0x3FF0000000000000, [Rs0].H = 0x0000000000000000
Please note that the conditions pushed on top of the stack are independent of the value of BS3.
Takes 12 cycles to execute.
Example: CPUSHxx 255 2 0x41 0xA 0xB
STKC FLW IOC AGU ASEL BS5 P5 BS4 C4 P4 MPC BS3 C3 P3 P2 P1 P0
--------------------------------------------------------------------
- - - - - 0 00 0 0 00 CN10 0 0 00 00 0a 41
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 0b 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 0 0 00 00 00 00
- - - - - 0 00 0 0 00 - 2 0 ff 00 00 00
Pxx - - - - 0 00 0 0 00 - 0 0 00 00 00 00
--------------------------------------------------------------------
where: xx is one of {EQ,NE}.
The exceptions are the same as the ones of the CNORM operations
!! Initial conditions:
!!
!! Content of register 0xA:
!! [0xA].H = 0x0000000000000000
!! [0xA].L = 0x3ff0000000000000
!!
!! Content of register 0xB:
!! [0xB].H = 0xc004000000000000
!! [0xB].L = 0x401e000000000000
!!
!! Content of register 0xC:
!! [0xC].H = 0xc004000000000000
!! [0xC].L = 0x400c000000000000
CPUSHEQ 255 3 0xA 0xB 0xC !! Pushes: High = FALSE Low = FALSE
CPUSHEQ 255 2 0xA 0xB 0xC !! Pushes: High = FALSE Low = FALSE
CPUSHEQ 255 1 0xA 0xB 0xC !! Pushes: High = FALSE Low = FALSE