vmjumpcc

 

 

Description

When evaluated, this vm instruction performs a generic dynamically typed compare of the source value with the comparitor value. If the comparison is true, the instruction pointer is set equal to the label argument; otherwise, the instruction pointer is promoted as usual. Conversion between different numeric types is automatic. Comparison of String types and Symbol types involves a full ascii comparison of their string data. Comparison of all other object types involves a deep comparison of their structured content.

The condition code for this instruction cc may compare for less than, less than or equal, equal, not equal, greater than, greater than or equal, all depending upon the value of cc. The condition code cc is an extension to the instruction name so that there are really six JMPcc instructions. vmjmplt, vmjmple, vmjmpeq, vmjmpne, vmjmpge, and vmjmpgt.

The operation of this vm instruction is expressed in the following C expression:

This virtual machine instruction performs a generic compare operation (see the compare built-in function). So that all value pairs may be compared, this instruction compares incompatible data types in the order of their type codes (for instance Integers always compare less than Strings). The disparate types which are compared by their values are as follows:

 

Syntax

(vmjmplt source comparitor label)


Name Format AIS Types
sourceregoffsetword
comparitorregoffset word
label immediateinteger


(vmjmpeq source comparitor label)


Name Format AIS Types
sourceregoffsetword
comparitorregoffset word
label immediateinteger


(vmjmpge source comparitor label)


Name Format AIS Types
sourceregoffsetword
comparitorregoffset word
label immediateinteger


 

Examples

Here are a number of links to Lambda coding examples which contain this instruction in various use cases.

s

 

Keyword Links

Here are a number of links to this instruction by related keywords.

[...under construction ]

 

Instruction Type

Here are a number of links to this instructions of this same type.

vmadd vmaddi vmaddn vmand
vmapply vmargcount vmargfetch vmcadd
vmcall vmcallarg vmcdiv vmcmul
vmcsub vmdebugger vmdiv vmdivi
vmdivn vmdivr vmdivri vmdivrn
vmiadd vmiand vmiandb vmidiv
vmidivr vmimul vmior vmiorb
vmisub vmixor vmixorb vmjump
vmjumpcc vmmove vmmovei vmmoven
vmmul vmmuli vmmuln vmnadd
vmndiv vmndivr vmnmul vmnop
vmnsub vmonerror vmopt vmor
vmpop vmpush vmref vmrefbitvector
vmrefbytevector vmrefdickey vmrefdicvalue vmrefdirkey
vmrefdirvalue vmreffltvector vmrefintvector vmreflongvector
vmrefmatrix vmrefnummatrix vmrefnumvector vmrefobjvector
vmrefpcdvector vmrefshortvector vmrefstring vmrefstrkey
vmrefstrvalue vmrefsymbol vmreftext vmrefvector
vmreturn vmself vmsend vmset
vmsetbitvector vmsetbytevector vmsetdickey vmsetdicvalue
vmsetdirkey vmsetdirvalue vmsetfltvector vmsetintvector
vmsetlongvector vmsetmatrix vmsetnummatrix vmsetnumvector
vmsetobjvector vmsetpcdvector vmsetshortvector vmsetstring
vmsetstrkey vmsetstrvalue vmsetvector vmshl
vmshr vmsmovei vmsub vmsubi
vmsubn vmtestescape vmxor

 

Argument Types

Here are a number of links which are related to this instructions .

vmadd vmaddi vmaddn vmand
vmapply vmargcount vmargfetch vmcadd
vmcall vmcdiv vmcmul vmcsub
vmdebugger vmdiv vmdivi vmdivn
vmdivr vmdivri vmdivrn vmiadd
vmiand vmiandb vmidiv vmidivr
vmimul vmior vmiorb vmisub
vmixor vmixorb vmjump vmjumpcc
vmmul vmmuli vmmuln vmnadd
vmnatAddInteger vmnatAddNumber vmnatAndInteger vmnatDivInteger
vmnatDivNumber vmnatDivrInteger vmnatDivrNumber vmnatJumpCCInteger
vmnatJumpCCNumber vmnatLoadCharacter vmnatLoadFloat vmnatLoadInteger
vmnatLoadLong vmnatLoadNumber vmnatLoadShort vmnatMulInteger
vmnatMulNumber vmnatOrInteger vmnatSaveCharacter vmnatSaveFloat
vmnatSaveInteger vmnatSaveLong vmnatSaveNumber vmnatSaveShort
vmnatShlInteger vmnatShrInteger vmnatSubInteger vmnatSubNumber
vmnatXorInteger vmndiv vmndivr vmnmul
vmnsub vmopt vmor vmpop
vmpush vmrefbitvector vmrefbytevector vmrefdickey
vmrefdicvalue vmrefdirkey vmrefdirvalue vmreffltvector
vmrefintvector vmreflongvector vmrefmatrix vmrefnummatrix
vmrefnumvector vmrefobjvector vmrefpcdvector vmrefshortvector
vmrefstring vmrefstrkey vmrefstrvalue vmrefsymbol
vmreftext vmrefvector vmregAbsNumber vmregAddImmediate
vmregAddInteger vmregAddNumber vmregAddPointer vmregAndImmediate
vmregAndInteger vmregCosNumber vmregDivImmediate vmregDivInteger
vmregDivNumber vmregDivrImmediate vmregDivrInteger vmregDivrNumber
vmregIncPointer vmregInteger vmregJump vmregJumpCCImmediate
vmregJumpCCInteger vmregJumpCCNumber vmregLoadAddress vmregLoadDclType
vmregLoadInteger vmregLoadJmpPointer vmregLoadNumber vmregLoadTail
vmregLoadType vmregLogNumber vmregMoveImmediate vmregMoveInteger
vmregMoveNumber vmregMulImmediate vmregMulInteger vmregMulNumber
vmregNumber vmregObjLength vmregObjPointer vmregOrImmediate
vmregOrInteger vmregPwrNumber vmregRefCharacter vmregRefFloat
vmregRefInteger vmregRefLong vmregRefNumber vmregRefShort
vmregRefXCharacter vmregRefXFloat vmregRefXInteger vmregRefXLong
vmregRefXNumber vmregRefXShort vmregRefXWord vmregRunInHarware
vmregSaveDeclType vmregSaveDeclTypeImmediate vmregSaveInteger vmregSaveNumber
vmregSaveTail vmregSaveTailImmediate vmregSetCharImmediate vmregSetCharacter
vmregSetFloat vmregSetIntImmediate vmregSetInteger vmregSetLong
vmregSetLongImmediate vmregSetNumber vmregSetShort vmregSetShortImmediate
vmregSetWord vmregSetXCharImmediate vmregSetXCharacter vmregSetXFloat
vmregSetXIntImmediate vmregSetXInteger vmregSetXLong vmregSetXLongImmediate
vmregSetXNumber vmregSetXShort vmregSetXShortImmediate vmregSetXWord
vmregShlImmediate vmregShlInteger vmregShrImmediate vmregShrInteger
vmregSinNumber vmregSqrtNumber vmregStringCompare vmregStringiCompare
vmregSubImmediate vmregSubInteger vmregSubNumber vmregSubPointer
vmregTanNumber vmregXorImmediate vmregXorInteger vmsend
vmsetbitvector vmsetbytevector vmsetdickey vmsetdicvalue
vmsetdirkey vmsetdirvalue vmsetfltvector vmsetintvector
vmsetlongvector vmsetmatrix vmsetnummatrix vmsetnumvector
vmsetobjvector vmsetpcdvector vmsetshortvector vmsetstring
vmsetstrkey vmsetstrvalue vmsetvector vmshl
vmshr vmsub vmsubi vmsubn
vmvecBinary vmvecInitialize vmvecNumScalar vmvecNumVector
vmvecPop vmvecPopNumber vmvecPush vmvecPushNumber
vmvecSetIncrements vmvecSetPointers vmvecSwapCC vmvecUnary
vmxor

 

Virtual Machine Instructions

AIS Lambdas are designed to be write-once-run-anywhere executable objects. This is accomplished via the virtual machine concept of software Lambda execution. Lambda virtual machines are designed to be mapped onto the actual host microchip at the server location, providing faithful Lambda execution wherever the Lambda may travel on the Internet. There are currently several virtual machines operating within Analytic Information Server. The DRM virtual machine uses a Dynamically typed Register Machine model to provide portable Lambda execution from high level dynamically typed instructions all the way to super fast microchip-level register execution. The DRM virtual machine runs in emulation mode during the testing and debug phases of Lambda development, and there is an AIS Lambda debugger available for Lambdas running on this virtual machine. During the final release phases of Lambda development, DRM virtual machine Lambdas are automatically converted to the NATIVE virtual machine on the host computer, using the just-in-time compiler. The NATIVE virtual machine is a faithful machine language translation of the execution rules in the DRM virtual machine onto the actual host microchip at the server location. NATIVE virtual machine execution runs at microchip-level execution speeds.

How do I contact the AIS team?

You can always talk with the AIS at aiserver.sourceforge.net.