Algorithm 3 LUT-based modular reduction in source code (mod 12,289) |
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, 0X3F
|
|
|
|
24: ANDI R20, 0X01
|
|
6: MUL R24, R23
|
|
25: ANDI R30, 0XC0
|
|
7: ADD R19, R0
|
|
|
|
8: ADC R20, R1
|
|
26: ADD R30, R21
|
|
9: ADC R21, R26
|
|
27: LDI R31, hi8(LUT2_L)
|
{LUT access} |
|
|
28: ADD R31, R20
|
|
10: MUL R25, R22
|
|
29: LPM R24, Z
|
|
11: ADD R19, R0
|
|
|
|
12: ADC R20, R1
|
|
30: LDI R31, hi8(LUT2_H)
|
|
13: ADC R21, R26
|
|
31: ADD R31, R20
|
|
|
|
32: LPM R25, Z
|
|
14: MOV R30, R20
|
|
|
|
15: LDI R31, hi8(LUT1_L)
|
{LUT access} |
33: ADD R24, R18
|
|
16: LPM R22, Z
|
|
34: ADC R25, R19
|
|
|
|
35: CLR R1
|
|