sort: SUBI SP,SP,#48 // make room on stack for 5 regs STUR LR,[SP,#32] // save LR on stack STUR X22,[SP,#24] // save X22 on stack STUR X21,[SP,#16] // save X21 on stack STUR X20,[SP,#8] // save X20 on stack STUR X19,[SP,#0] // save X19 on stack MOV X21, X0 // copy parameter X0 into X21 MOV X22, X1 // copy parameter X1 into X22 // for (i = 0; i = 0 && v[j] > v[j + 1]; j -= 1) { SUBI X20, X19, #1 // j = i - 1 for2tst: CMP X20,XZR // compare X20 to 0 (j to 0) B.LT exit2 // go to exit2 if X20 < 0 (j < 0) LSL X10, X20, #3 // reg X10 = j * 8 ADD X11, X21, X10 // reg X11 = v + (j * 8) LDUR X12, [X11,#0] // reg X12 = v[j] LDUR X13, [X11,#8] // reg X13 = v[j + 1] CMP X12, X13 // compare X12 to X13 B.LE exit2 // go to exit2 if X12 = X13 MOV X0, X21 // first swap parameter is v MOV X1, X20 // second swap parameter is j BL swap // call swap SUBI X20, X20, #1 // j –= 1 B for2tst // branch to test of inner loop exit2: ADDI X19,X19,#1 // i += 1 B for1tst // branch to test of outer loop exit1: LDUR X19, [SP,#0] // restore X19 from stack LDUR X20, [SP,#8] // restore X20 from stack LDUR X21,[SP,#16] // restore X21 from stack LDUR X22,[SP,#24] // restore X22 from stack LDUR X30,[SP,#32] // restore LR from stack ADDI SP,SP,#48 // restore stack pointer BR LR