31.4.2.2 Available Instructions
The available ALU instructions are listed in
31.2 Transfer Instructions on page
special instructions are listed in
and shows which registers are affected. For instructions involving BUFC, the BUFC Buffers are defined by READBUFSEL and WRITE-
BUFSEL in CRYPTO_CTRL for BUFC reads and writes respectively. V0 and V1 in the instructions descriptions can be any of the DDA-
TAx registers and a selection of the DATAx registers. They can be selected using the SELDDATAxDDATAy, SELDATAxDDATAy, SELD-
DATAxDATAy and SELDATAxDATAy instructions. The first register in the instruction will be selected for V0, and the second for V1. This
configuration stays even when the sequence is complete, and can also be set up front. The currently selected V0 and V1 can be read
V0 and V1 in CRYPTO_CSTATUS.
Instruction
Description
ADD
DDATA0 = V0 + V1
ADDO
DDATA0 = V0 + V1
ADDC
DDATA0 = V0 + V1 + carry
ADDIC
DDATA0 = V0 + V1 + carry << 128
MADD
DDATA0 = (V0 + V1) mod P
MADD32
DDATA0[i] = V0[i] + V1[i].
Word-wise addition
SUB
DDATA0 = V0 - V1
SUBC
DDATA0 = V0 - V1 - carry
MSUB
DDATA0 = (V0 - V1) mod P
MUL
DDATA0 = DDATA1 * V1.
See
31.4.2.3 MULx Details
MULC
DDATA0 = DDATA1 * V1 + (DDATA0 << MULWIDTH).
See
31.4.2.3 MULx Details
MMUL
DDATA0 = (DDATA1 * V1) mod P
MULO
DDATA0 = DDATA1 * V1.
See
31.4.2.3 MULx Details
SHL
DDATA0 = V0 << 1
SHLC
DDATA0 = V0 << 1 | carry
SHLB
DDATA0 = V0 << 1 | V0[resultwidth-1]
SHL1
DDATA0 = V0 << 1 | 1
SHR
DDATA0 = V0 >> 1
SHRC
DDATA0 = V0 >> 1 | carry << resultwidth-1
silabs.com | Building a more connected world.
Table 31.1 ALU Instructions on page
1032, conditional instructions are listed in
Table 31.4 Special Instructions on page
Table 31.1. ALU Instructions
1031, data transfer instructions are listed in
Table 31.3 Conditional Instructions on page 1033
1033. The tables explains the side-effects of the instructions
Constraints/Notes
If V0 != DDATA0, then V1 != DDATA0
Carry is only set, not cleared.
If V0 != DDATA0, then V1 != DDATA0
If V0 != DDATA0, then V1 != DDATA0
If V0 != DDATA0, then V1 != DDATA0.
If resultwidth is 128b, then carry is undefined
If V0 != DDATA0, then V1 != DDATA0
carry is not modified.
If V0 != DDATA0, then V1 != DDATA0
V1 != DDATA0.
If V1 is 128b and resultwidth > 128b,
then upper 128b are unknown
V1 != DDATA0.
If V1 is 128b and resultwidth > 128b,
then upper 128b are unknown
V1 != DDATA0.
If V1 is 128b and resultwidth > 128b,
then upper 128b are unknown
V1 != DDATA0,DDATA1
V1 != DDATA0,DDATA1
V1 != DDATA0,DDATA1
V1 != DDATA0,DDATA1. Carry is only set, not cleared
If V0 is 128b and resultwidth is 260b, then upper 4b are un-
known
If V0 is 128b and resultwidth is 260b, then upper 4b are un-
known
If V0 is 128b and resultwidth is 260b, then upper 4b are un-
known
If V0 is 128b and resultwidth is 260b, then upper 4b are un-
known
Reference Manual
CRYPTO - Crypto Accelerator
Table
Rev. 1.1 | 1031
and
Need help?
Do you have a question about the EFR32xG14 Wireless Gecko and is the answer not in the manual?
Questions and answers