boot2

Playing with the boostrap
git clone https://git.ryansepassi.com/git/boot2.git
Log | Files | Refs | README

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