Averest


AbacusInstr Type

Abacus is a typical RISC architecture; the following data type specifies however only the scalar part of the instructions, while there are also vector instructions. See also Abacus reference card. For addition, subtraction, multiplication, division there are four variants:

  • AbcOp(rd,r1,r2) means signed operation Reg[rd] := Reg[r1] op Reg[r2]
  • AbcOpU(rd,r1,r2) means unsigned operation Reg[rd] := Reg[r1] op Reg[r2]
  • AbcOpI(rd,r1,c) means signed operation Reg[rd] := Reg[r1] op c
  • AbcOpIU(rd,r1,c) means unsigned operation Reg[rd] := Reg[r1] op c
The following are logic operations
  • AbcAnd(rd,r1,r2) means bitwise Reg[rd] := Reg[r1] & Reg[r2]
  • AbcOr(rd,r1,r2) means bitwise Reg[rd] := Reg[r1] | Reg[r2]
  • AbcXor(rd,r1,r2) means bitwise Reg[rd] := Reg[r1] ^ Reg[r2]
  • AbcNeg(rd,r1) means bitwise Reg[rd] := !Reg[r1]
  • AbcShift(rd,r1,r2) means left shift of Reg[r1] by Reg[r2] bits to Reg[rd]
The following are comparison operations
  • AbcSlt(rd,r1,r2) means signed operation Reg[rd] := Reg[r1] < Reg[r2]
  • AbcSltU(rd,r1,r2) means unsigned operation Reg[rd] := Reg[r1] < Reg[r2]
  • AbcSlet(rd,r1,r2) means signed operation Reg[rd] := Reg[r1] <= Reg[r2]
  • AbcSletU(rd,r1,r2) means unsigned operation Reg[rd] := Reg[r1] <= Reg[r2]
  • AbcSeq(rd,r1,r2) means equality Reg[rd] := Reg[r1] == Reg[r2]
  • AbcSne(rd,r1,r2) means negated equality Reg[rd] := Reg[r1] != Reg[r2]
The following are memory operations
  • AbcMove(rd,c) means Reg[rd] := bv2int(c)
  • AbcOvf(rd) means Reg[rd] := ovflw
  • AbcLoad(rd,r1,r2) means Reg[rd] := Mem[Reg[r1] + Reg[r2]]
  • AbcLoadI(rd,r1,c) means Reg[rd] := Mem[Reg[r1] + bv2nat(c)]
  • AbcStore(rd,r1,r2) means Mem[Reg[r1] + Reg[r2]] := Reg[rd]
  • AbcStoreI(rd,r1,c) means Mem[Reg[r1] + bv2nat(c)] := Reg[rd]
The following are control flow operations
  • AbcBez(rd,c) means if(Reg[rd]==0) pc := pc + bv2int(c)
  • AbcBnz(rd,c) means if(Reg[rd]!=0) pc := pc + bv2int(c)
  • AbcJmp(rd) means pc := pc + Reg[rd]
The following are operations for thread control where additionally a load-link register is modified and checked:
  • AbcLdLink(rd,r1,c) means Reg[rd] := Mem[Reg[r1] + bv2nat(c)]
  • AbcStCond(rd,r1,r2) means Mem[Reg[r1] + Reg[r2]] := Reg[rd]
  • AbcSync waits until the store buffer is emptied

Union cases

Union case Description

AbcAdd(regindex, regindex, regindex)

Full Usage: AbcAdd(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcAddI(regindex, regindex, Iconst)

Full Usage: AbcAddI(regindex, regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Iconst

AbcAddIU(regindex, regindex, Uconst)

Full Usage: AbcAddIU(regindex, regindex, Uconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Uconst

AbcAddU(regindex, regindex, regindex)

Full Usage: AbcAddU(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcAnd(regindex, regindex, regindex)

Full Usage: AbcAnd(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcBez(regindex, Iconst)

Full Usage: AbcBez(regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : Iconst

AbcBnz(regindex, Iconst)

Full Usage: AbcBnz(regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : Iconst

AbcDiv(regindex, regindex, regindex)

Full Usage: AbcDiv(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcDivI(regindex, regindex, Iconst)

Full Usage: AbcDivI(regindex, regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Iconst

AbcDivIU(regindex, regindex, Uconst)

Full Usage: AbcDivIU(regindex, regindex, Uconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Uconst

AbcDivU(regindex, regindex, regindex)

Full Usage: AbcDivU(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcJ Iconst

Full Usage: AbcJ Iconst

Parameters:

Item : Iconst

AbcJmp regindex

Full Usage: AbcJmp regindex

Parameters:

Item : regindex

AbcLdLink(regindex, regindex, regindex)

Full Usage: AbcLdLink(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcLoad(regindex, regindex, regindex)

Full Usage: AbcLoad(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcLoadI(regindex, regindex, Uconst)

Full Usage: AbcLoadI(regindex, regindex, Uconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Uconst

AbcMove(regindex, Iconst)

Full Usage: AbcMove(regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : Iconst

AbcMul(regindex, regindex, regindex)

Full Usage: AbcMul(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcMulI(regindex, regindex, Iconst)

Full Usage: AbcMulI(regindex, regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Iconst

AbcMulIU(regindex, regindex, Uconst)

Full Usage: AbcMulIU(regindex, regindex, Uconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Uconst

AbcMulU(regindex, regindex, regindex)

Full Usage: AbcMulU(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcNeg(regindex, regindex)

Full Usage: AbcNeg(regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex

AbcOr(regindex, regindex, regindex)

Full Usage: AbcOr(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcOvf regindex

Full Usage: AbcOvf regindex

Parameters:

Item : regindex

AbcSeq(regindex, regindex, regindex)

Full Usage: AbcSeq(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcShift(regindex, regindex, regindex)

Full Usage: AbcShift(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSle(regindex, regindex, regindex)

Full Usage: AbcSle(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSleU(regindex, regindex, regindex)

Full Usage: AbcSleU(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSlt(regindex, regindex, regindex)

Full Usage: AbcSlt(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSltU(regindex, regindex, regindex)

Full Usage: AbcSltU(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSne(regindex, regindex, regindex)

Full Usage: AbcSne(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcStCond(regindex, regindex, regindex)

Full Usage: AbcStCond(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcStore(regindex, regindex, regindex)

Full Usage: AbcStore(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcStoreI(regindex, regindex, Uconst)

Full Usage: AbcStoreI(regindex, regindex, Uconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Uconst

AbcSub(regindex, regindex, regindex)

Full Usage: AbcSub(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSubI(regindex, regindex, Iconst)

Full Usage: AbcSubI(regindex, regindex, Iconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Iconst

AbcSubIU(regindex, regindex, Uconst)

Full Usage: AbcSubIU(regindex, regindex, Uconst)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : Uconst

AbcSubU(regindex, regindex, regindex)

Full Usage: AbcSubU(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex

AbcSync

Full Usage: AbcSync

AbcXor(regindex, regindex, regindex)

Full Usage: AbcXor(regindex, regindex, regindex)

Parameters:

Item1 : regindex
Item2 : regindex
Item3 : regindex