011-ptr-arith.P1pp (1879B)
1 # tests/p1/ptr-arith.P1pp -- libp1pp pointer scaling macros. 2 # 3 # %ptr_add(rd, ptr, idx, sz, scratch) rd = ptr + idx*sz 4 # %ptr_sub(rd, ptr, idx, sz, scratch) rd = ptr - idx*sz 5 # %ptr_diff(rd, p, q, sz, scratch) rd = (p - q) / sz (sz constant) 6 7 %fn(p1_main, 0, { 8 # ---- A: ptr_add sz=1 ------------------------------------------------ 9 %li(s0, 1000) %li(s1, 7) 10 %ptr_add(t0, s0, s1, 1, t1) 11 %li(t2, 1007) %bne(t0, t2, &.fail) 12 %la(a0, &c_a) %li(a1, 1) %call(&print) 13 14 # ---- B: ptr_add sz=4 ------------------------------------------------ 15 %li(s0, 1000) %li(s1, 5) 16 %ptr_add(t0, s0, s1, 4, t1) 17 %li(t2, 1020) %bne(t0, t2, &.fail) 18 %la(a0, &c_b) %li(a1, 1) %call(&print) 19 20 # ---- C: ptr_add sz=8 ------------------------------------------------ 21 %li(s0, 1000) %li(s1, 3) 22 %ptr_add(t0, s0, s1, 8, t1) 23 %li(t2, 1024) %bne(t0, t2, &.fail) 24 %la(a0, &c_c) %li(a1, 1) %call(&print) 25 26 # ---- D: ptr_sub sz=4 ------------------------------------------------ 27 %li(s0, 1000) %li(s1, 5) 28 %ptr_sub(t0, s0, s1, 4, t1) 29 %li(t2, 980) %bne(t0, t2, &.fail) 30 %la(a0, &c_d) %li(a1, 1) %call(&print) 31 32 # ---- E: ptr_diff sz=4 ----------------------------------------------- 33 %li(s0, 1020) %li(s1, 1000) 34 %ptr_diff(t0, s0, s1, 4, t1) 35 %li(t2, 5) %bne(t0, t2, &.fail) 36 %la(a0, &c_e) %li(a1, 1) %call(&print) 37 38 # ---- F: ptr_diff sz=8 ----------------------------------------------- 39 %li(s0, 1024) %li(s1, 1000) 40 %ptr_diff(t0, s0, s1, 8, t1) 41 %li(t2, 3) %bne(t0, t2, &.fail) 42 %la(a0, &c_f) %li(a1, 1) %call(&print) 43 44 %la(a0, &c_nl) %li(a1, 1) %call(&print) 45 %li(a0, 0) 46 %b(&.done) 47 48 :.fail 49 %la(a0, &c_x) %li(a1, 1) %call(&print) 50 %la(a0, &c_nl) %li(a1, 1) %call(&print) 51 %li(a0, 1) 52 :.done 53 }) 54 55 :c_a "A" 56 :c_b "B" 57 :c_c "C" 58 :c_d "D" 59 :c_e "E" 60 :c_f "F" 61 :c_x "X" 62 :c_nl " 63 " 64 65 :ELF_end