desc $10, 132, "001F"
Syntax: addb src1, src2, dst addf src1, src2, dst addw src1, src2, dst addl src1, src2, dst Function: dst = src1 + src2
Syntax: addc src1, src2, dst Function: dst = src1 + src2
Syntax: alt src, dst
struct Alt { int nsend; /* Number of senders */ int nrecv; /* Number of receivers */ struct { Channel* c; /* Channel */ void* val; /* Address of lval/rval */ } entry[]; };
Syntax: andb src1, src2, dst andw src1, src2, dst andl src1, src2, dst Function: dst = src1 & src2
Syntax: beqb src1, src2, dst beqc src1, src2, dst beqf src1, src2, dst beqw src1, src2, dst beql src1, src2, dst Function: if src1 == src2 then pc = dst
Syntax: bgeb src1, src2, dst bgec src1, src2, dst bgef src1, src2, dst bgew src1, src2, dst bgel src1, src2, dst Function: if src1 >= src2 then pc = dst
Syntax: bgtb src1, src2, dst bgtc src1, src2, dst bgtf src1, src2, dst bgtw src1, src2, dst bgtl src1, src2, dst Function: if src1 > src2 then pc = dst
Syntax: bleb src1, src2, dst blec src1, src2, dst blef src1, src2, dst blew src1, src2, dst blel src1, src2, dst Function: if src1 <= src2 then pc = dst
Syntax: bltb src1, src2, dst bltc src1, src2, dst bltf src1, src2, dst bltw src1, src2, dst bltl src1, src2, dst Function: if src1 < src2 then pc = dst
Syntax: bneb src1, src2, dst bnec src1, src2, dst bnef src1, src2, dst bnew src1, src2, dst bnel src1, src2, dst Function: if src1 != src2 then pc = dst
Syntax: call src, dst Function: link(src) = pc frame(src) = fp mod(src) = 0 fp = src pc = dst
Syntax: case src, dst Function: pc = 0..i: dst[i].pc where dst[i].lo >= src && dst[i].hi < src
Syntax: casec src, dst Function: pc = 0..i: dst[i].pc where dst[i].lo >= src && dst[i].hi < src
Syntax: consb src, dst consc src, dst consf src, dst consl src, dst consm src, dst consmp src, dst consp src, dst consw src, dst Function: p = new(src, dst) dst = p
Syntax: cvtac src, dst Function: dst = string(src)
Syntax: cvtbw src, dst Function: dst = src & 0xff
Syntax: cvtca src, dst Function: dst = array(src)
Syntax: cvtcf src, dst Function: dst = (float)src
Syntax: cvtcl src, dst Function: dst = (big)src
Syntax: cvtcw src, dst Function: dst = (int)src
Syntax: cvtfc src, dst Function: dst = string(src)
Syntax: cvtfw src, dst Function: dst = (int)src
Syntax: cvtfl src, dst Function: dst = (big)src
Syntax: cvtfr src, dst Function: dst = (short float)src
Syntax: cvtlc src, dst Function: dst = string(src)
Syntax: cvtlw src, dst Function: dst = (int)src
Syntax: cvtsw src, dst Function: dst = (int)src
Syntax: cvtwb src, dst Function: dst = (byte)src;
Syntax: cvtwc src, dst Function: dst = string(src)
Syntax: cvtwl src, dst Function: dst = (big)src;
Syntax: cvtwf src, dst Function: dst = (float)src;
Syntax: cvtws src, dst Function: dst = (short)src;
Syntax: cvtlf src, dst Function: dst = (float)src;
Syntax: cvtrf src, dst Function: dst = (float)src;
Syntax: divb src1, src2, dst divf src1, src2, dst divw src1, src2, dst divl src1, src2, dst Function: dst = src2/src1
Syntax: eclr
Syntax: exit Function: exit()
Syntax: frame src1, src2 Function: src2 = fp + src1->size initmem(src2, src1);
Syntax: goto src, dst Function: pc = dst[src]
Syntax: headb src, dst headf src, dst headm src, dst headmp src, dst headp src, dst headw src, dst headl src, dst Function: dst = hd src
Syntax: indc src1, src2, dst Function: dst = src1[src2]
Syntax: indx src1, dst, src2 Function: dst = &src1[src2]
Syntax: indb src1, dst, src2 indw src1, dst, src2 indf src1, dst, src2 indl src1, dst, src2 Function: dst = src1[src2]
Syntax: insc src1, src2, dst Function: src1[src2] = dst
Syntax: jmp dst Function: pc = dst
Syntax: lea src, dst Function: dst = &src
Syntax: lena src, dst Function: dst = nelem(src)
Syntax: lenc src, dst Function: dst = utflen(src)
Syntax: lenl src, dst Function: dst = 0; for(l = src; l; l = tl l) dst++;
Syntax: load src1, src2, dst Function: dst = load src2 src1
int nentries; struct { /* word aligned */ int sig; byte name[]; /* UTF encoded name, 0-terminated */ } entry[];
Syntax: lsrw src1, src2, dst lsrl src1, src2, dst Function: dst = (unsigned)src2 >> src1
Syntax: mcall src1, src2, src3 Function: link(src1) = pc frame(src1) = fp mod(src1) = current_moduleptr current_moduleptr = src3->moduleptr fp = src1 pc = src3->links[src2]->pc
Syntax: mframe src1, src2, dst Function: dst = fp + src1->links[src2]->t->size initmem(dst, src1->links[src2])
Syntax: mnewz src1, src2, dst Function: dst = malloc(src1->types[src2]->size) initmem(dst, src1->types[src2]->map)
Syntax: modb src1, src2, dst modw src1, src2, dst modl src1, src2, dst Function: dst = src2 % src1
Syntax: movb src, dst movw src, dst movf src, dst movl src, dst Function: dst = src
Syntax: movm src1, src2, dst Function: memmove(&dst, &src1, src2)
Syntax: movmp src1, src2, dst Function: decmem(&dst, src2) memmove(&dst, &src1, src2->size) incmem(&src, src2)
Syntax: movp src, dst Function: destroy(dst) dst = src incref(src)
Syntax: movpc src, dst Function: dst = PC(src);
Syntax: mspawn src1, src2, src3 Function: fork(); if(child){ link(src1) = 0 frame(src1) = 0 mod(src1) = src3->moduleptr current_moduleptr = src3->moduleptr fp = src1 pc = src3->links[src2]->pc }
Syntax: mulb src1, src2, dst mulw src1, src2, dst mulf src1, src2, dst mull src1, src2, dst Function: dst = src1 * src2
Syntax: nbalt src, dst
Syntax: negf src, dst Function: dst = -src
Syntax: new src, dst newz src, dst Function: dst = malloc(src->size); initmem(dst, src->map);
Syntax: newa src1, src2, dst newaz src1, src2, dst Function: dst = malloc(src2->size * src1); for(i = 0; i < src1; i++) initmem(dst + i*src2->size, src2->map);
Syntax: newcw dst newcb dst newcl dst newcf dst newcp dst newcm src, dst newcmp src, dst Function: dst = new(Channel)
Syntax: orb src1, src2, dst orw src1, src2, dst orl src1, src2, dst Function: dst = src1 | src
Syntax: recv src, dst Function: dst = <-src
Syntax: ret Function: npc = link(fp) mod = mod(fp) fp = frame(fp) pc = npc
Syntax: send src, dst Function: dst <-= src
Syntax: shlb src1, src2, dst shlw src1, src2, dst shll src1, src2, dst Function: dst = src2 << src1
Syntax: shrb src1, src2, dst shrw src1, src2, dst shrl src1, src2, dst Function: dst = src2 >> src1
Syntax: slicea src1, src2, dst Function: dst = dst[src1:src2]
Syntax: slicec src1, src2, dst Function: dst = dst[src1:src2]
Syntax: slicela src1, src2, dst Function: dst[src2:] = src1
Syntax: spawn src, dst Function: fork(); if(child) dst(src);
Syntax: subb src1, src2, dst subf src1, src2, dst subw src1, src2, dst subl src1, src2, dst Function: dst = src2 - src1
Syntax: tail src, dst Function: dst = src->next
Syntax: tcmp src, dst Function: if(typeof(src) != typeof(dst)) error("typecheck");
Syntax: xorb src1, src2, dst xorw src1, src2, dst xorl src1, src2, dst Function: dst = src1 ^ src2
Objfile { Header; Code_section; Type_section; Data_section; Module_name; Link_section; };
Header { OP: magic_number; Signature; OP: runtime_flag; OP: stack_extent; OP: code_size; OP: data_size; OP: type_size; OP: link_size; OP: entry_pc; OP: entry_type; };
Signature { OP: length; array[length] of byte: signature; };
MUSTCOMPILE = 1<<0 DONTCOMPILE = 1<<1 SHAREMP = 1<<2
Instruction { B: opcode; B: address_mode; Middle_data; Source_data; Dest_data; };
bit 7 6 5 4 3 2 1 0 m1 m0 s2 s1 s0 d2 d1 d0
Type_descriptor { OP: desc_number; OP: size; OP: number_ptrs; array[number_ptrs] of B: map; };
Short_item { B: code; OP: offset; array[code & 16rF] of type[code>>4]: data; }; Long_item { B: code; OP: count; OP: offset; array[ndata] of type[code>>4]: data; };
Linkage_item { OP: pc; OP: desc_number; W: sig; array[] of byte: name; };