015-unops.P1pp (1773B)
1 # tests/p1/unops.P1pp -- libp1pp unary helpers. 2 # 3 # %neg(rd, ra, scratch) rd = -ra (uses scratch for the zero literal) 4 # %bnot(rd, ra, scratch) rd = ~ra (uses scratch for the all-ones literal) 5 # %bool(rd, ra) rd = (ra != 0) ? 1 : 0 6 # 7 # Output: "ABCDEF\n". 8 9 %fn(p1_main, 0, { 10 # ---- A: neg positive (5 -> -5) ------------------------------------- 11 %li(s0, 5) 12 %neg(t0, s0, t1) 13 %li(t2, -5) 14 %bne(t0, t2, &.fail) 15 %la(a0, &c_a) %li(a1, 1) %call(&print) 16 17 # ---- B: neg negative (-7 -> 7) ------------------------------------- 18 %li(s0, -7) 19 %neg(t0, s0, t1) 20 %li(t2, 7) 21 %bne(t0, t2, &.fail) 22 %la(a0, &c_b) %li(a1, 1) %call(&print) 23 24 # ---- C: bnot 0 -> -1 ----------------------------------------------- 25 %li(s0, 0) 26 %bnot(t0, s0, t1) 27 %li(t2, -1) 28 %bne(t0, t2, &.fail) 29 %la(a0, &c_c) %li(a1, 1) %call(&print) 30 31 # ---- D: bnot 0xA5 -> ~0xA5 (= -0x166 actually) ---------------------- 32 %li(s0, 0xA5) 33 %bnot(t0, s0, t1) 34 %li(t2, -166) 35 %bne(t0, t2, &.fail) 36 %la(a0, &c_d) %li(a1, 1) %call(&print) 37 38 # ---- E: bool zero -> 0 --------------------------------------------- 39 %li(s0, 0) 40 %bool(t0, s0) 41 %li(t2, 0) 42 %bne(t0, t2, &.fail) 43 %la(a0, &c_e) %li(a1, 1) %call(&print) 44 45 # ---- F: bool nonzero -> 1 ------------------------------------------ 46 %li(s0, 42) 47 %bool(t0, s0) 48 %li(t2, 1) 49 %bne(t0, t2, &.fail) 50 %la(a0, &c_f) %li(a1, 1) %call(&print) 51 52 %la(a0, &c_nl) %li(a1, 1) %call(&print) 53 %li(a0, 0) 54 %b(&.done) 55 56 :.fail 57 %la(a0, &c_x) %li(a1, 1) %call(&print) 58 %la(a0, &c_nl) %li(a1, 1) %call(&print) 59 %li(a0, 1) 60 :.done 61 }) 62 63 :c_a "A" 64 :c_b "B" 65 :c_c "C" 66 :c_d "D" 67 :c_e "E" 68 :c_f "F" 69 :c_x "X" 70 :c_nl " 71 " 72 73 :ELF_end