012-sub-word-mem.P1pp (2633B)
1 # tests/p1/sub-word-mem.P1pp -- exercise libp1pp sub-word memory macros. 2 # 3 # %ld_h(rd, base, off, scratch) — 2-byte zero-extending load 4 # %ld_w(rd, base, off, scratch) — 4-byte zero-extending load 5 # %ld_sh(rd, base, off, scratch) — 2-byte sign-extending load 6 # %ld_sw(rd, base, off, scratch) — 4-byte sign-extending load 7 # %st_h(rs, base, off, scratch) — 2-byte store (low 16 bits) 8 # %st_w(rs, base, off, scratch) — 4-byte store (low 32 bits) 9 # 10 # Each subtest writes one ASCII byte to stdout on success, "X" on 11 # any mismatch. Expected: "ABCDEF\n". 12 13 %fn(p1_main, 0, { 14 # ---- A: %st_h byte order (little-endian) ---------------------------- 15 %la(s0, &buf) 16 %li(t0, 0xCAFE) 17 %st_h(t0, s0, 0, t1) 18 %lb(t2, s0, 0) 19 %li(t1, 0xFE) 20 %bne(t2, t1, &.fail) 21 %lb(t2, s0, 1) 22 %li(t1, 0xCA) 23 %bne(t2, t1, &.fail) 24 %la(a0, &c_a) %li(a1, 1) %call(&print) 25 26 # ---- B: %st_w byte order -------------------------------------------- 27 %la(s0, &buf) 28 %li(t0, 0xDEADBEEF) 29 %st_w(t0, s0, 0, t1) 30 %lb(t2, s0, 0) %li(t1, 0xEF) %bne(t2, t1, &.fail) 31 %lb(t2, s0, 1) %li(t1, 0xBE) %bne(t2, t1, &.fail) 32 %lb(t2, s0, 2) %li(t1, 0xAD) %bne(t2, t1, &.fail) 33 %lb(t2, s0, 3) %li(t1, 0xDE) %bne(t2, t1, &.fail) 34 %la(a0, &c_b) %li(a1, 1) %call(&print) 35 36 # ---- C: %ld_h round-trip (zero-extend) ------------------------------ 37 %la(s0, &buf) 38 %li(t0, 0xCAFE) 39 %st_h(t0, s0, 8, t1) 40 %ld_h(t0, s0, 8, t1) 41 %li(t1, 0xCAFE) 42 %bne(t0, t1, &.fail) 43 %la(a0, &c_c) %li(a1, 1) %call(&print) 44 45 # ---- D: %ld_w round-trip (zero-extend) ------------------------------ 46 %la(s0, &buf) 47 %li(t0, 0xDEADBEEF) 48 %st_w(t0, s0, 8, t1) 49 %ld_w(t0, s0, 8, t1) 50 %li(t1, 0xDEADBEEF) 51 %bne(t0, t1, &.fail) 52 %la(a0, &c_d) %li(a1, 1) %call(&print) 53 54 # ---- E: %ld_sh sign-extend ------------------------------------------ 55 %la(s0, &buf) 56 %li(t0, 0x8000) 57 %st_h(t0, s0, 0, t1) 58 %ld_sh(t0, s0, 0, t1) 59 %li(t1, -32768) 60 %bne(t0, t1, &.fail) 61 %la(a0, &c_e) %li(a1, 1) %call(&print) 62 63 # ---- F: %ld_sw sign-extend ------------------------------------------ 64 %la(s0, &buf) 65 %li(t0, 0x80000000) 66 %st_w(t0, s0, 0, t1) 67 %ld_sw(t0, s0, 0, t1) 68 %li(t1, -2147483648) 69 %bne(t0, t1, &.fail) 70 %la(a0, &c_f) %li(a1, 1) %call(&print) 71 72 %la(a0, &c_nl) %li(a1, 1) %call(&print) 73 %li(a0, 0) 74 %b(&.done) 75 76 :.fail 77 %la(a0, &c_x) %li(a1, 1) %call(&print) 78 %la(a0, &c_nl) %li(a1, 1) %call(&print) 79 %li(a0, 1) 80 :.done 81 }) 82 83 :c_a "A" 84 :c_b "B" 85 :c_c "C" 86 :c_d "D" 87 :c_e "E" 88 :c_f "F" 89 :c_x "X" 90 :c_nl " 91 " 92 93 :buf 94 %(0) %(0) 95 96 :ELF_end