[NAME] ALL.daovm.architecture.instruction [TITLE] VM Instructions [DESCRIPTION] 1 DVM_NOP # no operation, the VM assumes maximum one NOP between two effective codes; 2 DVM_DATA # create primitive data: A: type<=DAO_COMPLEX, B: value, C: register; 3 DVM_GETCL # get local const: C = A::B; A=0; B, index of the constant; 4 DVM_GETCK # get class const: C = A::B; current class, A=0; parent class: A>=1; 5 DVM_GETCG # get global const: C = A::B; current namespace, A=0; loaded: A>=1; 6 DVM_GETVH # get host variable from code section: C = A::B; A, outer level; 7 DVM_GETVS # get static variable or captured up variable from closure; 8 DVM_GETVO # get instance object variables: C = A::B; A=0; 9 DVM_GETVK # get class global variables: C = A::B; A: the same as GETCK; 10 DVM_GETVG # get global variables: C = A::B; A: the same as GETCG; 11 DVM_GETI # GET Item(s) : C = A[B]; 12 DVM_GETDI # GET Item(s) : C = A[B], B is the (direct) index; 13 DVM_GETMI # GET Item(s) : C = A[A+1, ..., A+B]; 14 DVM_GETF # GET Field : C = A.B 15 DVM_SETVH # set host variable in code section: C::B = A; C, outer level; 16 DVM_SETVS # set static variable or captured up variable from closure; 17 DVM_SETVO # set object variables: C::B = A, C the same as A in DVM_GETVO 18 DVM_SETVK # set class variables: C::B = A, C the same as A in DVM_GETVK 19 DVM_SETVG # set global variables: C::B = A, C the same as A in DVM_GETVG 20 DVM_SETI # SET Item(s) : C[B] = A; 21 DVM_SETDI # SET Item(s) : C[B] = A, B is the (direct) index; 22 DVM_SETMI # SET Item(s) : C[C+1, ..., C+B] = A; 23 DVM_SETF # SET Field : C.B = A 24 DVM_LOAD # put local value A as reference at C; 25 DVM_CAST # convert A to C if they have different types; 26 DVM_MOVE # C = A; if B==0, XXX it is compile from assignment, for typing system only 27 DVM_NOT # C = ! A; not 28 DVM_MINUS # C = - A; unary minus; 29 DVM_TILDE # C = ~ A 30 DVM_SIZE # C = % A; size operation; 31 DVM_ADD # C = A + B; 32 DVM_SUB # C = A - B; 33 DVM_MUL # C = A * B; 34 DVM_DIV # C = A / B; 35 DVM_MOD # C = A % B; 36 DVM_POW # C = A ** B; 37 DVM_AND # C = A && B; 38 DVM_OR # C = A || B; 39 DVM_LT # C = A < B; 40 DVM_LE # C = A <= B; 41 DVM_EQ # C = A == B; 42 DVM_NE # C = A != B; 43 DVM_IN # C = A in B; 44 DVM_BITAND # C = A & B 45 DVM_BITOR # C = A | B 46 DVM_BITXOR # C = A ^ B 47 DVM_BITLFT # C = A << B 48 DVM_BITRIT # C = A >> B 49 DVM_CHECK # check type: C = A ?= B; C = A ?< B, where A is data, B is data or type 50 DVM_NAMEVA # C = A => B: name A, local constant, value B, local register 51 DVM_PAIR # C = A : B; create a pair of index, as a tuple; 52 DVM_TUPLE # tuple: C = ( A, A+1, ..., A+B-1 ); B>=2, items can be: name=>value 53 DVM_LIST # list: C = { A, A+1, ..., A+B-1 }; 54 DVM_MAP # map: C = { A => A+1, ..., A+B-2 => A+B-1 }; if B==0, empty; 55 DVM_HASH # hash: C = { A -> A+1, ..., A+B-2 -> A+B-1 }; if B==0, empty; 56 DVM_VECTOR # vector: C = [ A, A+1, ..., A+B-1 ]; 57 DVM_MATRIX # matrix: C=[A,..,A+c-1;..;A+c*(r-1),..,A+c*r-1]; B=rc;r,c:8-bits each. 58 DVM_APLIST # arithmetic progression list: C = { A : ... : A+B-1 }, B = 2 or 3; 59 DVM_APVECTOR # arithmetic progression vector: C = [ A : ... : A+B-1 ], B = 2 or 3; 60 DVM_CURRY # class_or_routine_name: A{ A+1, ..., A+B } 61 DVM_MCURRY # object.method: A{ A+1, ..., A+B } 62 DVM_ROUTINE # create a function, possibly with closure 63 DVM_CLASS # C = class{}, A,A+1,..A+B: A, tuple, A+1, proto class, A+2,.. proto values 64 DVM_GOTO # go to B; 65 DVM_SWITCH # A: variable, B: location of default codes, C: number of cases 66 DVM_CASE # A: constant of the case, B: location of the case codes, C: case mode 67 DVM_ITER # create an iterator at C for A if B==0, else test an array of iterators; 68 DVM_TEST # if A, go to the next one; else, goto B-th instruction; 69 DVM_MATH # C = A( B ); A: sin,cos,...; B: double,complex 70 DVM_CALL # function call: C = A( A+1, A+2, ..., A+B ); If B==0, no parameters; 71 DVM_MCALL # method call: x.y(...), pass x as the first parameter; 72 DVM_RETURN # return A,A+1,..,A+B-1; B==0: no returns; C==1: return from functional; 73 DVM_YIELD # yield A, A+1,.., A+B-1; return data at C when resumed; 74 DVM_EVAL # evaluate a code section: C=@@(A){}, if B==1, otherwise, C=@@{}; 75 DVM_SECT # code section label, parameters: A,A+1,...,A+B-1; C #explicit parameters; 76 DVM_JITC # run Just-In-Time compiled Code A, and skip the next B instructions; 77 DVM_DEBUG # prompt to debugging mode;