| 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 | |||