| 10/15/1999 - (LGM) Creation

| This is where the beta-machine instruction encoding is defined. 

.macro WORD(x) (x)%256 (x)/256          | Low-byte followed by high-byte.
.macro LONG(x) WORD(x) WORD((x) >> 16)  | Low-word followed by high-word.

| beta instructions generic macros
.macro ENC_NOLIT(OP, Ra, Rb, Rc)((OP<<2)+(Rc>>3)) (((Rc%8)<<5)+Ra) (Rb<<3) (0)
.macro ENC_LIT(OP, Ra, Rc, Lit)	((OP<<2)+(Rc>>3)) (((Rc%8)<<5)+Ra) WORD(Lit)

| Register encoding
.macros r(r)			r
R31	= r(31)
XP	= r(30)
SP	= r(29)
LP	= r(28)
BP	= r(27)

| beta instructions
.macro badd(Ra, Rb, Rc)   	ENC_NOLIT(0b100000, Ra, Rb, Rc)
.macro baddc(Ra, Lit, Rc) 	ENC_LIT(0b110000, Ra, Rc, Lit)
.macro bsub(Ra, Rb, Rc)		ENC_NOLIT(0b100001, Ra, Rb, Rc)
.macro bsubc(Ra, Lit,Rc)	ENC_LIT(0b110001, Ra, Rc, Lit)

.macro bbne(Ra, label, Rc)	ENC_LIT(0b011110, Ra, Rc, ((label-.+3)>>2) - 1)
.macro bbeq(Ra, label, Rc)	ENC_LIT(0b011101, Ra, Rc, ((label-.+3)>>2) - 1)
.macro bjmp(Ra, Rc)		ENC_LIT(0b011011, Ra, Rc, 0)

.macro bld(Ra, Lit, Rc)		ENC_LIT(0b011000, Ra, Rc, Lit)
.macro bldr(label, Rc)		ENC_LIT(0b011111, 0, Rc, ((label-.+3)>>2) - 1)
.macro bst(Rc, Lit, Ra)		ENC_LIT(0b011001, Ra, Rc, Lit)

.macro bcmpeq(Ra, Rb, Rc)	ENC_NOLIT(0b100100, Ra, Rb, Rc)
.macro bcmpeqc(Ra, Lit, Rc)	ENC_LIT(0b110100, Ra, Rc, Lit)
.macro bcmple(Ra, Rb, Rc)	ENC_NOLIT(0b100110, Ra, Rb, Rc)
.macro bcmplec(Ra, Lit, Rc)	ENC_LIT(0b110110, Ra, Rc, Lit)

.macro bdiv(Ra, Rb, Rc)		ENC_NOLIT(0b100011, Ra, Rb, Rc)
.macro bdivc(Ra, Lit, Rc)	ENC_LIT(0b110011, Ra, Rc, Lit)
.macro bmul(Ra, Rb, Rc)		ENC_NOLIT(0b100010, Ra, Rb, Rc)
.macro bmulc(Ra, Lit, Rc)	ENC_LIT(0b110010, Ra, Rc, Lit)

.macro band(Ra, Rb, Rc)		ENC_NOLIT(0b101000, Ra, Rb, Rc)
.macro bandc(Ra, Lit, Rc)	ENC_LIT(0b111000, Ra, Rc, Lit)
.macro bor(Ra, Rb, Rc)		ENC_NOLIT(0b101001, Ra, Rb, Rc)
.macro borc(Ra, Lit, Rc)	ENC_LIT(0b111001, Ra, Rc, Lit)
.macro bxor(Ra, Rb, Rc)		ENC_NOLIT(0b101010, Ra, Rb, Rc) 
.macro bxorc(Ra, Lit, Rc)	ENC_LIT(0b111010, Ra, Rc, Lit)

.macro bshr(Ra, Rb, Rc)		ENC_NOLIT(0b101101, Ra, Rb, Rc)
.macro bshrc(Ra, Lit, Rc)	ENC_LIT(0b111101, Ra, Rc, Lit)
.macro bshl(Ra, Rb, Rc)		ENC_NOLIT(0b101100, Ra, Rb, Rc)
.macro bshlc(Ra, Lit, Rc)	ENC_LIT(0b111100, Ra, Rc, Lit)
.macro bsra(Ra, Rb, Rc)		ENC_NOLIT(0b101110, Ra, Rb, Rc)
.macro bsrac(Ra, Lit, Rc)	ENC_LIT(0b111110, Ra, Rc, Lit)
