General memory access: 30 instructions set: 16 set R F set R I set R *F set R *I set *F F set *F I set *F *F set *F *I set *I F set *I I set *I *F set *I *I swap: 6 swap R R swap R *F swap R *I swap *F *F swap *F *I swap *I *I // replaced with swap *I *F swap *F *I xchg: 9 xchg R {FO} xchg R *{FO} xchg R *{PH} xchg *{FO} {FO} xchg *{FO} *{FO} xchg *{FO} *{PH} xchg *{PH} {FO} xchg *{PH} *{FO} xchg *{PH} *{PH} ldua: ldua {RSOIFPH} {RS} ldua *{RSOIFPH} {RS} ldus: ldus {RSOIFPH} {RS} ldus *{RSOIFPH} {RS} stua: stua {RSOIFPH} {RS} stua *{RSOIFPH} {RS} mcpy: mcpy {RSOIFPH} {RSOFPH} mcpy {RSOIFPH} *{RSOFPH} mcpy *{RSOIFPH} {RSOFPH} mcpy *{RSOIFPH} *{RSOFPH} mset: mset {RSOIFPH} {RSOFPH} mset {RSOIFPH} *{RSOFPH} mset *{RSOIFPH} {RSOFPH} mset *{RSOIFPH} *{RSOFPH} Stack ops: 10 (4+6) instructions mpush: 2 mpush {FO} mpush {PH} mpop: 2 mpop {FO} mpop {PH} rot: 4 rot {FO} {FO} rot {FO} {PH} rot {PH} {FO} rot {PH} {PH} rev: 2 rev {FO} rev {PH} Hstack ops: 6 (4+2) instructions mhpush: 2 mhpush {FO} mhpush {PH} mhpop: 2 mhpop {FO} mhpop {PH} save restore Integer arithmetic: 25 instructions add/sub: add {RSFPH} wadd {RSFPH} addc {RSFPH} waddc {RSFPH} sub {RSFPH} wsub {RSFPH} wsubc {RSFPH} wsubc {RSFPH} mul: mul {RSFPH} umul {RSFPH} wmul {RSFPH} wumul {RSFPH} pow {RSFPH} wpow {RSFPH} div/mod: div {RSFPH} idiv {RSFPH} mod {RSFPH} udiv {RSFPH} uidiv {RSFPH} umod {RSFPH} fma: fma {RSP} {RSFPH} ufma {RSP} {RSFPH} wfma {RSP} {RSFPH} wufma {RSP} {RSFPH} abs random neg Floating-point math: 50 instructions #too many to include Bitwise ops: 11 instructions bitand {RFPH} {RSFPH} bitor {RFPH} {RSFPH} bitxor (xor) {RFPH} {RSFPH} bitnot (compl) {RFPH} shll/shal {RFPH} {RSFPH} shcl {RFPH} {RSFPH} shlr {RFPH} {RSFPH} shar {RFPH} {RSFPH} shcr {RFPH} {RSFPH} popcnt {RFPH} clz {RFPH} C-INTERCAL ops: 5 instructions mingle/interleave {RFPH} {RSFPH} select {RFPH} {RSFPH} iand {RFPH} ior {RFPH} ixor {RFPH} Logical/comparison ops: 18 instructions #all take {RFPH} {RSFPH} Control flow: 12 instructions jmp {RFSOI} reljmp {RFSO} transfer return/ret halt err trap handle handle_quiet wait_us {RSFPH} systransfer {RFI} sysret Miscellaneous ops: 4 instructions explode collapse nop {...} {...} nop {...} {I} Subtotal: 163 instructions Explode and collapse: -2 + 12 instructions explode 2 explode 4 explode 8 explode 16 explode 32 explode 64 collapse 2 collapse 4 collapse 8 collapse 16 collapse 32 collapse 64 Subtotal: 173 instructions IO control: 13 instructions read_word {RSFPH} {RPH} read_word {RSFPH} *{RPHFSO} read_blck {RSFPH} {RSOIFPH} read_ch {RSFPH} {RPH} read_ch {RSFPH} *{RPHFSO} write_word {RSFPH} {RSOIFPH} write_word {RSFPH} *{RSOIFPH} write_str {RSFPH} {RSOIFPH} write_str {RSFPH} *{RSOIFPH} write_blck {RSFPH} {RSOIFPH} write_ch {RSFPH} {RSOFPH} write_ch {RSFPH} *{RSOIFPH} poll_in {RSFPH} Subtotal: 186 instructions O -> instruction? + 75 Subtotal: 261 Addressing modes (noptr): RModes: 55 -> 6bits F (R) = 26 P H O (R) = 26 I WModes: 26 -> 5bits R = 26 P H RWModes (xchg): 26 -> 5bits R = 26 *RMode = not included here. Address mode numbering: Registers: 00 = zero 01 = flag 02 = control 03 = max 04 = fzero 05 = finf 06 = err 07 = IP 08 = SP 09 = FP 0A = HSP 0B = LMA 0C = ccnt 0D = interval 0E = CSP 0F 10 = jump 11 = index 12 = gp0 13 = gp1 14 = arg 15 = counter 16 17 = SV 18 = PSV 19 = HSV 1A = LMV 1B = CSV RModes: 1A = %P 1B = %H 1C = %I WModes: 1A = %P 1B = %H Registers (16): 0 = zero 1 = r1/gp0 2 = r2/gp1 3 = r3/arg 4 = r4/counter 5 = jump 6 = index 7 = flag/control 8 = IP 9 = SP A = HSP B = LP C = SV D = PSV F = HSV F = LV Shadow registers (8): 0 = CSP 1 = CSV 2 = clock 3 = timer 4 = TIC 5 = ccnt 6 = interval 7 = CIC Addressing modes: R: Register 16 F: Register-adjusted 0 S: Small immediate signed, 20 bit 0 O: Register-offset-adjusted 16 I: Word immediate, uses whole word after the instruction 0 L: Large immediate signed, 32 bit 1 P: Stack 1 H: High stack 1 total: 34 @[anything]: Memory-indirect. Not actually an addressing mode, but an instruction semantic. RFSO RFSO RFLO ROPH ROPH RLFO PH PH set {R} {RSOF} set {R} @{RSOF} set @{RSOF} {RSOF} set @{RSOF} @{RSOF} set {RSOFPHI} {PHIL} set @{RSOFPHI} {PHIL} set {RSOFPHI} @{PHL} set @{RSOFPHI} @{PHL} set {PHI} {RSOFPHI} set @{PHI} {RSOFPHI} set {PHI} @{RSOFPHI} set @{PHI} @{RSOFPHI} swap R R swap R @{RFSO} swap R {PH} swap R @{PHL} swap *{RFSOPH} R swap *{RFSOPH} *{RFSOPH} xchg R {RSOIFPH} xchg R *{RSOIFPH} xchg *{RFSOPH} {RSOIFPH} xchg *{RFSOPH} *{RSOIFPH} Instruction formats: 2-op memory: 47 set *{RPHFSO} {RSOIFPH} set *{RPHFSO} *{RSOIFPH} swap *{RFSOPH} *{RFSOPH} xchg *{RFSOPH} {RSOIFPH} xchg *{RFSOPH} *{RSOIFPH} ldua {RSOIFPH} {RS} ldua *{RSOIFPH} {RS} ldus {RSOIFPH} {RS} ldus *{RSOIFPH} {RS} stua {RSOIFPH} {RS} stua *{RSOIFPH} {RS} mcpy {RSOIFPH} {RSOFPH} mcpy {RSOIFPH} *{RSOFPH} mcpy *{RSOIFPH} {RSOFPH} mcpy *{RSOIFPH} *{RSOFPH} mset {RSOIFPH} {RSOFPH} mset {RSOIFPH} *{RSOFPH} mset *{RSOIFPH} {RSOFPH} mset *{RSOIFPH} *{RSOFPH} rot {RSFPH} {RSFPH} bitand {RFPH} {RSFPH} bitor {RFPH} {RSFPH} bitxor (xor) {RFPH} {RSFPH} bitnot (compl) {RFPH} shll/shal {RFPH} {RSFPH} shcl {RFPH} {RSFPH} shlr {RFPH} {RSFPH} shar {RFPH} {RSFPH} shcr {RFPH} {RSFPH} mingle/interleave {RFPH} {RSFPH} select {RFPH} {RSFPH} read_word {RSFPH} {RPH} read_word {RSFPH} *{RPHFSO} read_blck {RSFPH} {RSOIFPH} read_ch {RSFPH} {RPH} read_ch {RSFPH} *{RPHFSO} write_word {RSFPH} {RSOIFPH} write_word {RSFPH} *{RSOIFPH} write_str {RSFPH} {RSOIFPH} write_str {RSFPH} *{RSOIFPH} write_blck {RSFPH} {RSOIFPH} write_ch {RSFPH} {RSOFPH} write_ch {RSFPH} *{RSOIFPH} 1-op misc: 44 set {RPH} {RSOIFPH} set {RPH} *{RSOIFPH} swap R R swap R *{RFSOPH} swap *{RFSOPH} R xchg R {RSOIFPH} xchg R *{RSOIFPH} mpush {RSFPH} mpop {RSFPH} rev {RSFPH} mhpush {RSFPH} mhpop {RSFPH} save restore jmp {RFSOI} reljmp {RFSO} transfer return/ret halt err trap handle handle_quiet wait_us {RSFPH} systransfer {RFI} sysret explode C collapse C read_cc xchg_cc load_shadow {RPH} C load_shadow *{RSOFPH} C store_shadow C {RSOIFPH} store_shadow C *{RSOIFPH} swap_shadow C C cxhg_shadow C {RSOIFPH} cxhg_shadow C *{RSOIFPH} popcnt {RFPH} clz {RFPH} iand {RFPH} ior {RFPH} ixor {RFPH} poll_in {RSFPH} random 1-op math: 37 abs itof ftoi fabs fsqrt fcbrt frcp fneg fceil ffloor ftrunc fround fiszero fisnormal fissubnormal fisinf fisnan fsign fsin fcos ftan fasin facos fatan fsinh fcosh ftanh fasinh facosh fatanh fexp fexp2 fexpm1 fln flb flg flnp1 2-op math: 34 add addc sub subc mul div idiv mod wadd waddc wsub wsubc wsubb umul udiv uidiv umod fma {RSFPH} {RSFPH} ufma {RSFPH} {RSFPH} fadd fsub fmul fdiv fpow fcmpgt fcmpge fcmplt fcmple fcmpeq fcmpne fcmpuo fatan2 frand ffma