Algorithm 2 LUT-based modular reduction in source code (mod 7681) |
Input: operands R22, R23, R24, R25
|
|
17: LDI R31, hi8(LUT1_H)
|
|
|
|
18: LPM R23, Z
|
|
Output: results {R24, R25}
|
|
|
|
|
|
19: ADD R18, R22
|
|
1: CLR R26
|
{MOV-and-ADD} |
20: ADC R19, R23
|
|
2: MUL R24, R22
|
|
21: ADC R20, R20
|
{Register re-use} |
3: MOVW R18, R0
|
|
|
|
4: MUL R25, R23
|
|
22: MOV R30, R19
|
|
5: MOVW R20, R0
|
|
23: ANDI R19, 0X1F
|
|
|
|
24: LSR R20
|
|
6: MOVW R18, R0
|
|
25: ROR R30
|
|
7: ADD R19, R0
|
|
|
|
8: MOVW R18, R0
|
|
26: ANDI R30, 0XF0
|
|
9: MOVW R18, R0
|
|
27: ADD R30, R21
|
|
|
|
28: LDI R31, hi8(LUT2_L)
|
{LUT access} |
10: MOVW R18, R0
|
|
29: LPM R24, Z
|
|
11: MOVW R18, R0
|
|
|
|
12: ADC R20, R1
|
|
30: LDI R31, hi8(LUT2_H)
|
|
13: ADC R21, R26
|
|
31: LPM R25, Z
|
|
|
|
|
|
14: MOV R30, R20
|
|
32: ADD R24, R18
|
|
15: LDI R31, hi8(LUT1_L)
|
{LUT access} |
33: ADC R25, R19
|
|
16: LPM R22, Z
|
|
34: CLR R1
|
|