| /* Copyright lowRISC contributors. */ | 
 | /* Licensed under the Apache License, Version 2.0, see LICENSE for details. */ | 
 | /* SPDX-License-Identifier: Apache-2.0 */ | 
 | /* | 
 |     An example of how hardware loops work in OTBN | 
 | */ | 
 |  | 
 |     /* The basic loop instruction (running 2 instructions 3 times) */ | 
 |     li  x2, 3 | 
 |     li  x3, 0 | 
 |  | 
 |     loop x2, 2 | 
 |     addi x3, x3, 2 | 
 |     addi x3, x3, -1 | 
 |  | 
 |     /* At this point, we've incremented x3 by 2-1 = 1 on each of three | 
 | 	   loop iterations, so x3 should equal 3. */ | 
 |  | 
 |     loopi 5, 1 | 
 |     addi x3, x3, -3 | 
 |  | 
 |     /* Now we've run a loop that decrements x3 by 3 on each of | 
 | 	   five loop iterations, so it should now equal 3-15 = -12. */ | 
 |  | 
 |     loop x2, 3 | 
 |     loopi 4, 1 | 
 |     addi x3, x3, 2 | 
 |     nop | 
 |  | 
 |     /* The nested loop runs 3 * 4 times, incrementing by 2 each | 
 | 	iteration. So x3 should now equal -12 + 2*12 = 12. */ | 
 |  | 
 |     ecall |