This documentation is based on the knowledge obtainded through implementing CleanJ system. This is not an official document and there are no warranty of the correctness.
ABC machine is made of three stack memories (argument stack, basic-value stack and control stack) and one heap memory.
- argument stack (A-Stack)
- a stack of pointers to a thunk.
- basic-value stack (B-Stack)
- a stack of basic values. Basic values are an integer value (Int), a character value (Char), a boolean value (Bool), a real number value (Real), a file IO object (File) and a descriptor object (Descriptor). Int, Char, Bool and Descriptor are all 1 word (4 bytes) but Real and File are all 2 words (8 bytes). The offset is counted in a word.
- control stack (C-Stack)
- a stack of program counters.
- Heap
- Thunks are built in this memory region.
ABC machine instructions consists of two types of instructions. One is a type of instructions to be executed in running the program, and the other is a type of instructions to define a label or a static data record.
absR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its absolute.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
add_args
This instruction is to be executed.
### NO DATA ###
addI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, add them and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
addR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack, add them and put the result Real value (2 words) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
andB
This instruction is to be executed.
No arguments are required.
take two Bool values (1 word each) at the top of B-Stack, take the logical AND of them and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
and%
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, take the bitwise AND of them and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
asinR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its arcsine in Radians.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
atanR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its arctangent in Radians.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
build descriptor1 a_size2 label3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number of arguments in A-Stack.
- label3
- a label for an address in the program code area.
build a thunk of a lazy function call with a_size2 number of arguments taken from the top of A-Stack, and then put it on the top of A-Stack. The arguments are removed from A-Stack.
The descriptor of the function is specified with descriptor1 and its entry point with label3. If there is no related descriptor the special letter '_' is placed in descriptor1.
If a_size2 is below zero the actual number of arguments follows the definition of descriptor1. Maybe it is 1. It seems to occur when the function is related to some data structure which is a field of another record type.
'build' = 'create' + 'fill'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildAC "string1"
This instruction is to be executed.
- "string1"
- a double-quoted string literal expression.
build a thunk of a string (unboxed Char array) corresponding to the string literal expression of "string1" and put it on the top of A-Stack.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildB boolean1
This instruction is to be executed.
- boolean1
- a Bool literal expression.
build a thunk of a Bool value corresponding to the Bool literal expression of boolean1 and put it on the top of A-Stack.
'buildB' = 'create' + 'fillB'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildB_b b_offset1
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
build a thunk of a Bool value corresponding to the Bool value (1 word) at the offset of b_offset1 in B-Stack and put it on the top of A-Stack.
'buildB_b' = 'create' + 'fillB_b'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildC 'character1'
This instruction is to be executed.
- 'character1'
- a single-quoted Char literal expression.
build a thunk of a Char value corresponding to the Char literal expression of 'character1' and put it on the top of A-Stack.
'buildC' = 'create' + 'fillC'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildC_b b_offset1
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
build a thunk of a Char value corresponding to the Char value (1 word) at the offset of b_offset1 in B-Stack and put it on the top of A-Stack.
'buildC_b' = 'create' + 'fillC_b'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildF_b b_offset1
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
build a thunk of a File object corresponding to the File object (2 words) at the offset of b_offset1 in B-Stack and put it on the top of A-Stack.
'buildF_b' = 'create' + 'fillF_b'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildh descriptor1 a_size2
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
build a thunk of structured data with a_size2 number of arguments taken from the top of A-Stack, and then put it on the top of A-Stack. The arguments are not removed from A-Stack.
The descriptor of the structured type is specified with descriptor1.
This is used also for a curried function call. They are all similar in that no further evaluation is needed. 'Buildh' instruction is defferent from 'build' instruction on that point
'buildh' = 'create' + 'fillh'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildI integer1
This instruction is to be executed.
- integer1
- an Int literal expression.
build a thunk of an Int value corresponding to the Int literal expression of integer1 and put it on the top of A-Stack.
'buildI' = 'create' + 'fillI'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildI_b b_offset1
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
build a thunk of a Int value corresponding to the Int value (1 word) at the offset of b_offset1 in B-Stack and put it on the top of A-Stack.
'buildI_b' = 'create' + 'fillI_b'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildR real1
This instruction is to be executed.
- real1
- a Real literal expression.
build a thunk of a Real value corresponding to the Real literal expression of real1 and put it on the top of A-Stack.
'buildR' = 'create' + 'fillR'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
buildR_b b_offset1
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
build a thunk of a Real value corresponding to the Real value (2 words) at the offset of b_offset1 in B-Stack and put it on the top of A-Stack.
'buildR_b' = 'create' + 'fillR_b'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
build_r descriptor1 a_size2 b_size3 a_offset4 b_offset5
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (zero or positive integer) of words of arguments in B-Stack.
- a_offset4
- an offset index (zero or positive integer) from the top of A-Stack.
- b_offset5
- an offset index (zero or positive integer) from the top of B-Stack.
build a thunk of structured data with a_size2 number of arguments taken from the offset of a_offset4 of the top of A-Stack and with and b_size3 number of words of arguments taken from B-Stack from the offset of b_offset5 of the top of B-Stack, and then put it on the top of A-Stack. The arguments are not removed from A-Stack or B-Stack.
The descriptor of the structured type is specified with descriptor1.
The thunks made by executing this instruction are needed no further evaluation, as those of 'buildh' instruction are. So 'build_r' can cover all of the domain of 'buildh.'
'build_r' = 'create' + 'fill_r'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
build_u descriptor1 a_size2 b_size3 label4
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (positive integer) of words of arguments in B-Stack.
- label4
- a label for an address in the program code area.
build a thunk of a lazy function call with a_size2 number of arguments taken from the top of A-Stack and with b_size3 number of words of arguments taken from the top of B-Stack, and then put it on the top of A-Stack. The arguments are removed from A-Stack and B-Stack.
The descriptor of the function is specified with descriptor1 and its entry point with label4. If there is no related descriptor the special letter '_' is placed in descriptor1.
The relation of 'build' and 'build_u' is very similar to that of 'buildh' and 'build_r' but the domain of 'build' and that of 'build_u' are not overlapped.
'build_u' = 'create' + 'fill_u'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
catS
This instruction is to be executed.
### NO DATA ###
ccall c_func_name1 "type_spec"
This instruction is to be executed.
- c_func_name1
- a function name to be called.
- "type_spec"
- a double-quoted string for specifying types of arguments and return values.
This instruction is a instruction for a foreign function call. C_func_name specifies a function to be called and "type_spec" specifies its types.
"Type_spec" has a following format:
"input-types:output-types:unrelated-arguments"
The separator can be '-' instead of ':.'
Unrelated-arguments is sometimes omitted and sometimes shown as 'A.'
The following characters are used for type specification (type name of Clean - type name of C language):
- I : Int (in B-Stack) - int
- R : Real (in B-Stack) - double
- S : String (in A-Stack) - CleanString (defined in Clean.h)
The function has a type signature which consists of a return value of the type of the first of output-types and arguments of each type in input-types and each pointer type in second or lator of output-types.
The first of output-types can also be 'V' which represent 'void' type in C language.
The following characters for type specification are still unclear:
- G
- P
- O
- F
When executing the instruction, evaluated thunks and basic values (*1) corresponding with the types of input-types are taken and removed from A-Stack and B-Stack respectively; call the function with *1; put returned values on the top of A-Stack and B-Stack according to the types of output-types.
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
centry
This instruction is to be executed.
### NO DATA ###
cmpS
This instruction is to be executed.
### NO DATA ###
code_channelP
This instruction is to be executed.
### NO DATA ###
copy_graph
This instruction is to be executed.
### NO DATA ###
cosR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its cosine in Radians.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
create
This instruction is to be executed.
No arguments are required.
create an empty thunk and put it on the top of A-Stack.
This instruction is usually used with one of 'fill*' series instructions.
The created thunk is filled with a empty value initially and if entering in the thunk before any 'fill*' operation applied to it 'cycle in spine' warning is displayed and system halts.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
create_array descriptor1 a_size2 b_size3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (zero or positive integer) of words of arguments in B-Stack.
take (and remove) a Int value (1 word) (*1) at the top of B-Stack; build a thunk (*2) with a_size2 number of arguments taken (and removed) from the top of A-Stack and with b_size3 number of words of arguments taken (and removed) from the top of B-Stack; create an array of size of *1; fill the array with *2; put the thunk of the array on the top of A-Stack.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
create_array_ descriptor1 a_size2 b_size3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of thunks in a element of array
- b_size3
- a number (zero or positive integer) of words of basic values in a element of array.
take (and remove) a Int value (1 word) (*1) at the top of B-Stack; create an array of size of *1; put the thunk of the array on the top of A-Stack.
This instruction only allocates memory area without initializing and the following instructions must initialize the allocated memory area.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
create_channel
This instruction is to be executed.
### NO DATA ###
CtoAC
This instruction is to be executed.
No arguments are required.
take a Char value (1 word) at the top of B-Stack, create a string (unboxed Char array) containing only one element of the Char value and put it on the top of A-Stack.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
CtoI
This instruction is to be executed.
No arguments are required.
replace a Char value (1 word) at the top of B-Stack with the corresponding Int value (1 word).
Actually this operation does not change B-Stack because the representation of a basic Char value and that of the corresponding basic Int value are the same.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
currentP
This instruction is to be executed.
### NO DATA ###
decI
This instruction is to be executed.
No arguments are required.
replace a Int value (1 word) at the top of B-Stack with the Int value (1 word) one decremented from the original value.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
del_args
This instruction is to be executed.
### NO DATA ###
divI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, divide the upper value (offset = 0) by the lower value (offset = 1) and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
divLU
This instruction is to be executed.
### NO DATA ###
divR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack, divide the upper value (offset = 0) by the lower value (offset = 2) and put the result Real value (2 words) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
divU
This instruction is to be executed.
### NO DATA ###
entierR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Int value (1 word) of its entier, that is the largest integer number smaller than or equal to the given real number.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqAC_a "string1"
This instruction is to be executed.
- "string1"
- a double-quoted string literal expression.
check the sameness between the string of the given string literal expression of "string1" and the thunk of the top of A-Stack which is expected to be an evaluated thunk of string (unboxed Char array) and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqB
This instruction is to be executed.
No arguments are required.
take two Bool values (1 word each) at the top of B-Stack, check the sameness between them and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqB_a boolean1 a_offset2
This instruction is to be executed.
- boolean1
- a Bool literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
check the sameness between the Bool value of boolean1 and the thunk at the offset of a_offset2 in A-Stack which is expected to be an evaluated thunk of Bool and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqB_b boolean1 b_offset2
This instruction is to be executed.
- boolean1
- a Bool literal expression.
- b_offset2
- an offset index (zero or positive integer) from the top of B-Stack.
check the sameness between the Bool value of boolean1 and the Bool value (1 word) at the offset of b_offset2 in B-Stack and put the result Bool value (1 word) on the top of B-Stack.
Note that this operation does not remove the Bool value from B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqC
This instruction is to be executed.
No arguments are required.
take two Char values (1 word each) at the top of B-Stack, check the sameness between them and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqC_a 'character1' a_offset2
This instruction is to be executed.
- 'character1'
- a single-quoted Char literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
check the sameness between the Char value of 'character1' and the thunk at the offset of a_offset2 in A-Stack which is expected to be an evaluated thunk of Char and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqC_b 'character1' a_offset2
This instruction is to be executed.
- 'character1'
- a single-quoted Char literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
check the sameness between the Char value of 'character1' and the Char value (1 word) of the offset of b_offset2 in B-Stack and put the result Bool value (1 word) on the top of B-Stack.
Note that this operation does not remove the Char value from B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eq_desc descriptor1 arity2 a_offset3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- arity2
- (probably) a number of descriptor1's arity. This argument is not used in CleanJ.
- a_offset3
- an offset index (zero or positive integer) from the top of A-Stack.
check whether the thunk at the offset of a_offset3 which is expected to be evaluated is belong to the descriptor of descriptor1 and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eq_desc_b
This instruction is to be executed.
### NO DATA ###
eqD_b descriptor1 b_offset2
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- b_offset2
- an offset index (zero or positive integer) from the top of B-Stack.
check the sameness between the Descriptor object of descriptor1 and the Descriptor object (1 word) at the offset of b_offset2 in B-Stack and put the result Bool value (1 word) on the top of B-Stack.
Note that this operation does not remove the Descriptor object from B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eq_nulldesc
This instruction is to be executed.
### NO DATA ###
eqI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, check the sameness between them and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqI_a integer1 a_offset2
This instruction is to be executed.
- integer1
- an Int literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
check the sameness between the Int value of integer1 and the thunk at the offset of a_offset2 in A-Stack which is expected to be an evaluated thunk of Int and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqI_b integer1 b_offset2
This instruction is to be executed.
- integer1
- an Int literal expression.
- b_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
check the sameness between the Int value of integer1 and the Int value (1 word) of the offset of b_offset2 in B-Stack and put the result Bool value (1 word) on the top of B-Stack.
Note that this operation does not remove the Int value from B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack, check the sameness between them and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqR_a real1 a_offset2
This instruction is to be executed.
- real1
- a Real literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
check the sameness between the Real value of real1 and the thunk at the offset of a_offset2 in A-Stack which is expected to be an evaluated thunk of Real and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eqR_b real1 b_offset2
This instruction is to be executed.
- real1
- a Real literal expression.
- b_offset2
- an offset index (zero or positive integer) from the top of B-Stack.
check the sameness between the Real value of real1 and the Real value (2 words) at the offset of b_offset2 in B-Stack and put the result Bool value (1 word) on the top of B-Stack.
Note that this operation does not remove the Real value from B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
eq_symbol
This instruction is to be executed.
### NO DATA ###
exit_false label1
This instruction is to be executed.
- label1
- a label for an address in the program code area.
take a Bool value (1 word) at the top of B-Stack and if it is a false value then set the address of label1 to the program counter or otherwise do nothing.
Note that the current program counter is not pushed on C-Stack but simply "jumped" in this operation.
This operation has exactly the same behaviour as the instruction 'jmp_false' except only for implying an abnormal end.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
expR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its exponential, that is Euler's number e raised to the power of the given real value.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
fill descriptor1 a_size2 label3 a_offset4
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number of arguments in A-Stack.
- label3
- a label for an address in the program code area.
- a_offset4
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset4 in A-Stack by the function call with a_size2 number of arguments taken (and removed) from the top of A-Stack.
The descriptor of the function is specified with descriptor1 and its entry point with label3. If there is no related descriptor the special letter '_' is placed in descriptor1.
If a_size2 is below zero the actual number of arguments follows the definition of descriptor1. Maybe it is 1. It seems to occur when the function is related to some data structure which is a field of another record type.
'build' = 'create' + 'fill'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fill1
This instruction is to be executed.
### NO DATA ###
fill1_r
This instruction is to be executed.
### NO DATA ###
fill2
This instruction is to be executed.
### NO DATA ###
fill2_r
This instruction is to be executed.
### NO DATA ###
fill3
This instruction is to be executed.
### NO DATA ###
fill3_r
This instruction is to be executed.
### NO DATA ###
fillB boolean1 a_offset2
This instruction is to be executed.
- boolean1
- a Bool literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Bool value corresponding to the Bool literal expression of boolean1.
'buildB' = 'create' + 'fillB'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillB_b b_offset1 a_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Bool value corresponding to the Bool value (1 word) at the offset of b_offset1 in B-Stack.
'buildB_b' = 'create' + 'fillB_b'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillC 'character1' a_offset2
This instruction is to be executed.
- 'character1'
- a single-quoted Char literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Char value corresponding to the Char literal expression of 'character1.'
'buildC' = 'create' + 'fillC'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillcaf caf1 a_size2 b_size3
This instruction is to be executed.
- caf1
- a CAF symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (zero or positive integer) of words of arguments in B-Stack.
take (but not remove) thunks and basic values (*1) according to a_size2 and b_size3 from the top of A-Stack and B-Stack respectively; update the contents of memory area for the CAF of caf1 with thunks and basic values of *1.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
fillcp
This instruction is to be executed.
### NO DATA ###
fillcp_u
This instruction is to be executed.
### NO DATA ###
fillC_b b_offset1 a_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Char value corresponding to the Char value (1 word) at the offset of b_offset1 in B-Stack.
'buildC_b' = 'create' + 'fillC_b'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillF_b b_offset1 a_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a File object corresponding to the File object (2 words) at the offset of b_offset1 in B-Stack.
'buildF_b' = 'create' + 'fillF_b'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillh descriptor1 a_size2 a_offset3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- a_offset3
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset3 in A-Stack by a structured data with a_size2 number of arguments taken from the top of A-Stack. The arguments are not removed from A-Stack or B-Stack.
The descriptor of the structured type is specified with descriptor1.
'buildh' = 'create' + 'fillh'
This instruction is still being investigated.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillI integer1 a_offset2
This instruction is to be executed.
- integer1
- an Int literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Int value corresponding to the Int literal expression of integer1.
'buildI' = 'create' + 'fillI'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillI_b b_offset1 a_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Int value corresponding to the Int value (1 word) at the offset of b_offset1 in B-Stack.
'buildI_b' = 'create' + 'fillI_b'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillR real1 a_offset2
This instruction is to be executed.
- real1
- an Real literal expression.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Real value corresponding to the Real literal expression of real1.
'buildR' = 'create' + 'fillR'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fillR_b b_offset1 a_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by a Real value corresponding to the Real value (2 words) at the offset of b_offset1 in B-Stack.
'buildR_b' = 'create' + 'fillR_b'
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fill_a a_offset1 a_offset2
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset2 in A-Stack by the contents of the thunk specified by the index of a_offset1 in A-Stack.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fill_r descriptor1 a_size2 b_size3 a_offset4 a_offset5 b_offset6
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (zero or positive integer) of words of arguments in B-Stack.
- a_offset4
- an offset index (zero or positive integer) from the top of A-Stack.
- a_offset5
- an offset index (zero or positive integer) from the top of A-Stack.
- b_offset6
- an offset index (zero or positive integer) from the top of B-Stack.
update the contents of the thunk specified by the index of a_offset4 in A-Stack by a structured data with a_size2 number of arguments taken from the offset of a_offset5 of the top of A-Stack and with and b_size3 number of words of arguments taken from B-Stack from the offset of b_offset6 of the top of B-Stack. The arguments are not removed from A-Stack or B-Stack.
The descriptor of the structured type is specified with descriptor1.
'build_r' = 'create' + 'fill_r'
This instruction is still being investigated.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
fill_u descriptor1 a_size2 b_size3 label4 a_offset5
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (positive integer) of words of arguments in B-Stack.
- label4
- a label for an address in the program code area.
- a_offset5
- an offset index (zero or positive integer) from the top of A-Stack.
update the contents of the thunk specified by the index of a_offset5 in A-Stack by a lazy function call with a_size2 number of arguments taken (and removed) from the top of A-Stack and with b_size3 number of words of arguments taken (and removed) from the top of B-Stack.
The descriptor of the function is specified with descriptor1 and its entry point with label4. If there is no related descriptor the special letter '_' is placed in descriptor1.
'build_u' = 'create' + 'fill_u'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
getWL
This instruction is to be executed.
### NO DATA ###
get_desc_arity
This instruction is to be executed.
### NO DATA ###
get_desc_flags_b
This instruction is to be executed.
### NO DATA ###
get_node_arity
This instruction is to be executed.
### NO DATA ###
gtC
This instruction is to be executed.
No arguments are required.
take two Char values (1 word each) at the top of B-Stack and if the upper value (offset = 0) is grater than the lower value (offset = 1) then put the Bool value of True (1 word) on the top of B-Stack, and otherwise put False (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
gtI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack and if the upper value (offset = 0) is grater than the lower value (offset = 1) then put the Bool value of True (1 word) on the top of B-Stack, and otherwise put False (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
gtR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack and if the upper value (offset = 0) is grater than the lower value (offset = 2) then put the Bool value of True (1 word) on the top of B-Stack, and otherwise put False (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
gtU
This instruction is to be executed.
### NO DATA ###
halt
This instruction is to be executed.
No arguments are required.
The system halts.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
in
This instruction is to be executed.
### NO DATA ###
incI
This instruction is to be executed.
No arguments are required.
replace a Int value (1 word) at the top of B-Stack with the Int value (1 word) one incremented from the original value.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
instruction
This instruction is to be executed.
### NO DATA ###
is_record
This instruction is to be executed.
### NO DATA ###
ItoC
This instruction is to be executed.
No arguments are required.
replace a Int value (1 word) at the top of B-Stack with the corresponding Char value (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
ItoP
This instruction is to be executed.
### NO DATA ###
ItoR
This instruction is to be executed.
No arguments are required.
replace a Int value (1 word) at the top of B-Stack with the corresponding Real value (2 words).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
jmp label1
This instruction is to be executed.
- label1
- a label for an address in the program code area.
set the address of label1 to the program counter.
Note that the current program counter is not pushed to C-Stack but simply "jumped" in this operation.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
jmp_ap
This instruction is to be executed.
### NO DATA ###
jmp_eval
This instruction is to be executed.
No arguments are required.
set the entry point of the evaluation function of the thunk at the top of A-Stack to the program counter.
Note that the current program counter is not pushed to C-Stack but simply "jumped" in this operation.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
jmp_eval_upd
This instruction is to be executed.
No arguments are required.
set the entry point of the eval-update function of the thunk at the top of A-Stack to the program counter. In the eval-update function the thunk at the top of A-Stack is evaluated before the thunk at the second top fills with the contents of the evaluated thunk at the top and the thunk at the top is removed from A-Stack.
Note that the current program counter is not pushed to C-Stack but simply "jumped" in this operation.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
jmp_false label1
This instruction is to be executed.
- label1
- a label for an address in the program code area.
take a Bool value (1 word) at the top of B-Stack and if it is a false value then set the address of label1 to the program counter or otherwise do nothing.
Note that the current program counter is not pushed to C-Stack but simply "jumped" in this operation.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
jmp_true label1
This instruction is to be executed.
- label1
- a label for an address in the program code area.
take a Bool value (1 word) at the top of B-Stack and if it is a true value then set the address of label1 to the program counter or otherwise do nothing.
Note that the current program counter is not pushed to C-Stack but simply "jumped" in this operation.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
jsr label1
This instruction is to be executed.
- label1
- a label for an address in the program code area.
set the address of label1 to the program counter after the current program counter is pushed to C-Stack.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack changes in this operation.
Heap does not change in this operation.
jsr_ap
This instruction is to be executed.
### NO DATA ###
jsr_eval
This instruction is to be executed.
No arguments are required.
set the entry point of the evaluation function of the thunk at the top of A-Stack to the program counter after the current program counter is pushed to C-Stack.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack changes in this operation.
Heap does not change in this operation.
lnR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its natural logarithm (base Euler's number e).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
log10R
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its common logarithm (base 10).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
ltC
This instruction is to be executed.
No arguments are required.
take two Char values (1 word each) at the top of B-Stack and if the upper value (offset = 0) is smaller than the lower value (offset = 1) then put the Bool value of True (1 word) on the top of B-Stack, and otherwise put False (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
ltI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack and if the upper value (offset = 0) is smaller than the lower value (offset = 1) then put the Bool value of True (1 word) on the top of B-Stack, and otherwise put False (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
ltR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack and if the upper value (offset = 0) is smaller than the lower value (offset = 1) then put the Bool value of True (1 word) on the top of B-Stack, and otherwise put False (1 word).
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
ltU
This instruction is to be executed.
### NO DATA ###
modI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, divide the upper value (offset = 0) by the lower value (offset = 1) and put the remainder Int value (1 word) on the top of B-Stack.
This operation has exactly the same behaviour as the instruction 'remI.'
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
mulI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, multiply the upper value (offset = 0) by the lower value (offset = 1) and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
mulR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack, divide the upper value (offset = 0) by the lower value (offset = 2) and put the result Real value (2 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
mulUUL
This instruction is to be executed.
### NO DATA ###
negI
This instruction is to be executed.
No arguments are required.
replace a Int value (1 word) at the top of B-Stack with the Int value (1 word) of its nagation.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
negR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its nagation.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
newP
This instruction is to be executed.
### NO DATA ###
new_ext_reducer
This instruction is to be executed.
### NO DATA ###
new_int_reducer
This instruction is to be executed.
### NO DATA ###
no_op
This instruction is to be executed.
No arguments are required.
do nothing.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
notB
This instruction is to be executed.
No arguments are required.
replace a Bool value (1 word) at the top of B-Stack with the Bool value (1 word) of its logical NOT.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
not%
This instruction is to be executed.
No arguments are required.
replace a Int value (1 word) at the top of B-Stack with the Int value (1 word) of its bitwise NOT.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
orB
This instruction is to be executed.
No arguments are required.
take two Bool values (1 word each) at the top of B-Stack, take the logical OR of them and put the result Bool value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
or%
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, take the bitwise OR of them and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
out
This instruction is to be executed.
### NO DATA ###
pop_a a_number1
This instruction is to be executed.
- a_number1
- number of thunks to remove from the top of A-Stack.
remove a_number1 number of thunks from the top of A-Stack.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pop_b b_number1
This instruction is to be executed.
- b_number1
- number of words to remove from the top of B-Stack.
remove b_number1 number of words from the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
powR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack, raise the upper value (offset = 0) to the power of the lower value (offset = 2) and put the result Real value (2 words) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
print "string1"
This instruction is to be executed.
- "string1"
- a double-quoted string literal expression.
print the string of "string1" to standard error stream.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
printD
This instruction is to be executed.
### NO DATA ###
print_char
This instruction is to be executed.
### NO DATA ###
print_int
This instruction is to be executed.
### NO DATA ###
print_real
This instruction is to be executed.
### NO DATA ###
print_sc
This instruction is to be executed.
### NO DATA ###
print_symbol
This instruction is to be executed.
### NO DATA ###
print_symbol_sc
This instruction is to be executed.
### NO DATA ###
pushA_a
This instruction is to be executed.
### NO DATA ###
pushB boolean1
This instruction is to be executed.
- boolean1
- a Bool literal expression.
put a Bool value corresponding to the Bool literal expression of boolean1 on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushB_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a Bool value corresponding to the evaluated thunk at the offset of a_offset1 in A-Stack on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushC 'character1'
This instruction is to be executed.
- 'character1'
- a single-quoted Char literal expression.
put a Char value corresponding to the Char literal expression of 'character1' on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushcaf caf1 a_size2 b_size3
This instruction is to be executed.
- caf1
- a CAF symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (zero or positive integer) of words of arguments in B-Stack.
put thunks and basic values in the CAF of caf1 on the top of A-Stack and B-Stack respectively.
A_size2 and b_size3 indicates the arity of the CAF of caf1.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushC_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a Char value corresponding to the evaluated thunk at the offset of a_offset1 in A-Stack on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushD descriptor1
This instruction is to be executed.
- descriptor1
- a Descriptor symbol.
put a Descriptor corresponding to the Descriptor symbol of descriptor1 on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushD_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a Descriptor of the evaluated thunk at the offset of a_offset1 in A-Stack on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushF_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a File object corresponding to the evaluated thunk at the offset of a_offset1 in A-Stack on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushI integer1
This instruction is to be executed.
- integer1
- a Int literal expression.
put a Int value corresponding to the Int literal expression of integer1 on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushI_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a Int value corresponding to the evaluated thunk at the offset of a_offset1 in A-Stack on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushL
This instruction is to be executed.
### NO DATA ###
pushR real1
This instruction is to be executed.
- real1
- a Real literal expression.
put a Real value corresponding to the Real literal expression of real1 on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushR_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a Real value corresponding to the evaluated thunk at the offset of a_offset1 in A-Stack on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
pushzs
This instruction is to be executed.
### NO DATA ###
push_a a_offset1
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
put a pointer to the thunk at the offset of a_offset1 in A-Stack on the top of A-Stack.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_arg a_offset1 arity2 index3
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- arity2
- (probably) a number of arity of the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- index3
- an index (positive integer less than or equals to arity2) in the thunk at the offset of a_offset1 in A-Stack.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put a value (which is also a thunk) at the index of index3 in the thunk of *1 on the top of A-Stack.
Be carefull that index3 is one-based.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_args a_offset1 arity2 length3
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- arity2
- (probably) a number (positive integer) of arity of the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- length3
- (probably) a number (positive integer) of arguments in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put all values (which are also all thunks) in the thunk of *1 on the top of A-Stack.
Length3 is always the same number as arity2.
The difference between 'push_args_u' and 'push_args' is still unclear.
'push_args' = 'push_a' + 'repl_args'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_args_u a_offset1 arity2 length3
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- arity2
- (probably) a number (positive integer) of arity of the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- length3
- (probably) a number (positive integer) of arguments in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put all values (which are also all thunks) in the thunk of *1 on the top of A-Stack.
Length3 is always the same number as arity2.
The difference between 'push_args_u' and 'push_args' is still unclear.
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_arg_b
This instruction is to be executed.
### NO DATA ###
push_array
This instruction is to be executed.
### NO DATA ###
push_arraysize descriptor1 a_size2 b_size3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol for unboxed array, or '_' otherwise.
- a_size2
- a number (zero or positive integer) of thunks in an element of array. This argument is not used in CleanJ.
- b_size3
- a number (zero or positive integer) of words of basic values in an element of array. This argument is not used in CleanJ.
take (and remove) a thunk (*1) at the top of A-Stack; take the array size of the thunk of *1 (which is an array) according to a_size2 and b_size3; put the Int value of the array size on the top of B-Stack.
Descriptor1 indicates the descriptor of the element of the array if the array is an unboxed array.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_a_b
This instruction is to be executed.
### NO DATA ###
push_a_r_args
This instruction is to be executed.
### NO DATA ###
push_b b_offset1
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
put a word at the offset of b_offset1 in B-Stack on the top of B-Stack.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_b_a
This instruction is to be executed.
### NO DATA ###
push_finalizers
This instruction is to be executed.
### NO DATA ###
push_node label1 a_size2
This instruction is to be executed.
- label1
- a label for an address in the program code area.
- a_size2
- a number (zero or positive integer) of size of thunks in the thunk at the top of A-Stack.
take (but not remove) a thunk (*1) at the top of A-Stack; put all thunks in the thunk of *1 on the top of A-Stack; fill the thunk of *1 with the function call of entry point label1 and no arguments.
Only a few patterns of label1 are found in the standard libraries of Clean 2.1.1 distribution: '_cycle_in_spine,' '_reserve' and '_.'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
push_node_u label1 a_size2 b_size3
This instruction is to be executed.
- label1
- a label for an address in the program code area.
- a_size2
- a number (zero or positive integer) of size of thunks in the thunk at the top of A-Stack.
- b_size2
- a number (zero or positive integer) of size of words of basic values in the thunk at the top of A-Stack.
take (but not remove) a thunk (*1) at the top of A-Stack; put all thunks in the thunk of *1 on the top of A-Stack and all basic values on the top of B-Stack; fill the thunk of *1 with the function call of entry point label1 and no arguments.
Only one pattern of label1 is found in the standard libraries of Clean 2.1.1 distribution: '_cycle_in_spine.'
'Push_node_u' and 'push_node' are very similar instruction but 'push_node_u' implies that the target thunk of the instruction contains not only thunks but basic values.
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
push_t_r_a
This instruction is to be executed.
### NO DATA ###
push_t_r_args
This instruction is to be executed.
### NO DATA ###
push_r_args a_offset1 a_size2 b_size3
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_size2
- (probably) a number (positive integer) of thunks in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- b_size3
- (probably) a number (positive integer) of words of basic values in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put all thunks in the thunk of *1 on the top of A-Stack and all basic values on the top of B-Stack.
'Push_r_args' is different with 'push_args' in that the target thunk of the instruction contains not only thunks but basic values.
The difference between 'push_r_args' and 'push_r_args_u' is still unclear.
'push_r_args' = 'push_a' + 'repl_r_args'
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_r_args_a a_offset1 a_size2 b_size3 a_index4 a_length5
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_size2
- (probably) a number (positive integer) of thunks in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- b_size3
- (probably) a number (positive integer) of words of basic values in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- a_index4
- an index (positive integer) in the thunk at the offset of a_offset1 in A-Stack.
- a_length5
- a number (positive integer) of thunks.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put a_length5 number of thunks from the index of a_index4 in the thunk of *1 on the top of A-Stack.
'push_r_args_a' = 'push_a' + 'repl_r_args_a'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_r_args_b a_offset1 a_size2 b_size3 b_index4 b_length5
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_size2
- (probably) a number (positive integer) of thunks in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- b_size3
- (probably) a number (positive integer) of words of basic values in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- b_index4
- an index (positive integer) in the thunk at the offset of a_offset1 in A-Stack.
- b_length5
- a number (positive integer) of words of basic values.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put b_length number of words of basic values from the index of b_index4 in the thunk of *1 on the top of B-Stack.
This instruction is still being investigated.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_r_args_u a_offset1 a_size2 b_size3
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_size2
- (probably) a number (positive integer) of thunks in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- b_size3
- (probably) a number (positive integer) of words of basic values in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
take (but not remove) an evaluated thunk (*1) at the offset of a_offset1 in A-Stack; put all thunks in the thunk of *1 on the top of A-Stack and all basic values on the top of B-Stack.
'Push_r_args_u' is different with 'push_args_u' in that the target thunk of the instruction contains not only thunks but basic values.
The difference between 'push_r_args' and 'push_r_args_u' is still unclear.
This instruction is still being investigated.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
push_r_arg_t
This instruction is to be executed.
### NO DATA ###
push_r_arg_u
This instruction is to be executed.
### NO DATA ###
push_wl_args
This instruction is to be executed.
### NO DATA ###
putWL
This instruction is to be executed.
### NO DATA ###
randomP
This instruction is to be executed.
### NO DATA ###
release
This instruction is to be executed.
### NO DATA ###
remI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, divide the upper value (offset = 0) by the lower value (offset = 1) and put the remainder Int value (1 word) on the top of B-Stack.
This operation has exactly the same behaviour as the instruction 'modI.'
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
remU
This instruction is to be executed.
### NO DATA ###
replace descriptor1 a_size2 b_size3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol for unboxed array, or '_' otherwise.
- a_size2
- a number (zero or positive integer) of thunks in an element of array.
- b_size3
- a number (zero or positive integer) of words of basic values in an element of array.
take (and remove) an evaluated thunk (which is an array) (*1) at the top of A-Stack; take (and remove) an Int value (*2) at the top of B-Stack; take (and remove) thunks and basic values (*3) according to a_size2 and b_size3 from the top of A-Stack and B-Stack respectively; put thunks and basic values in the thunk at the offset of *2 in the array of *1 on the top of A-Stack and B-Stack respectively; update the array of *1 at the offset of *2 with the values of *3.
Descriptor1 indicates the descriptor of the element of the array if the array is an unboxed array.
'replace' = 'select' + 'update'
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
repl_arg
This instruction is to be executed.
### NO DATA ###
repl_args arity1 length2
This instruction is to be executed.
- arity1
- (probably) a number (positive integer) of arity of the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- length2
- (probably) a number (positive integer) of arguments in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
take (and remove) an evaluated thunk (*1) at the top of A-Stack; put all values (which are also all thunks) in the thunk of *1 on the top of A-Stack.
Length2 is always the same number as arity1.
'push_args' = 'push_a' + 'repl_args'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
repl_args_b
This instruction is to be executed.
### NO DATA ###
repl_r_args a_size1 b_size2
This instruction is to be executed.
- a_size1
- (probably) a number (positive integer) of thunks in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
- b_size2
- (probably) a number (positive integer) of words of basic values in the thunk at the offset of a_offset1 in A-Stack. This argument is not used in CleanJ.
take (and remove) an evaluated thunk (*1) at the top of A-Stack; put all thunks in the thunk of *1 on the top of A-Stack and all basic values on the top of B-Stack.
'push_r_args' = 'push_a' + 'repl_r_args'
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
repl_r_args_a a_size1 b_size2 a_index3 a_length4
This instruction is to be executed.
- a_size1
- (probably) a number (positive integer) of thunks in the thunk at the top of A-Stack. This argument is not used in CleanJ.
- b_size2
- (probably) a number (positive integer) of words of basic values in the thunk at the top of A-Stack. This argument is not used in CleanJ.
- a_index3
- an index (positive integer) in the thunk at the top of A-Stack.
- a_length4
- a number (positive integer) of thunks.
take (and remove) an evalutated thunk (*1) at the top of A-Stack; put a_length4 number of thunks from the index of a_index3 in the thunk of *1 on the top of A-Stack.
'push_r_args_a' = 'push_a' + 'repl_r_args_a'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
rtn
This instruction is to be executed.
No arguments are required.
set the address at the top of C-Stack to the program counter and remove the address of the top from C-Stack.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack changes in this operation.
Heap does not change in this operation.
RtoI
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Int value (1 word) of its integral part.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
select descriptor1 a_size2 b_size3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol for unboxed array, or '_' otherwise.
- a_size2
- a number (zero or positive integer) of thunks in an element of array.
- b_size3
- a number (zero or positive integer) of words of basic values in an element of array.
take (and remove) an evaluated thunk (which is an array) (*1) at the top of A-Stack; take (and remove) a Int value (1 word) (*2) at the top of B-Stack; put thunks and basic values of a thunk at the offset of *2 in the array of *1 on the top of A-Stack and B-Stack respectively.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
send_graph
This instruction is to be executed.
### NO DATA ###
send_request
This instruction is to be executed.
### NO DATA ###
set_continue
This instruction is to be executed.
### NO DATA ###
set_defer
This instruction is to be executed.
### NO DATA ###
set_entry
This instruction is to be executed.
### NO DATA ###
set_finalizers
This instruction is to be executed.
### NO DATA ###
setwait
This instruction is to be executed.
### NO DATA ###
shiftl%
This instruction is to be executed.
No arguments are required.
take two Int value (1 word each) at the top of B-Stack, shift the upper value (offset = 0) to the left based on the lower value (offset = 1) filling new right hand bits with zero and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
shiftr%
This instruction is to be executed.
No arguments are required.
take two Int value (1 word each) at the top of B-Stack, shift the upper value (offset = 0) to the rifht based on the lower value (offset = 1) filling new left hand bits with the high-order bit of the upper value and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
shiftrU
This instruction is to be executed.
### NO DATA ###
sinR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its sine in Radians.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
sliceS
This instruction is to be executed.
### NO DATA ###
sqrtR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its square root.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
stop_reducer
This instruction is to be executed.
### NO DATA ###
subI
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, subtract the lower value (offset = 1) from the upper value (offset = 0) and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
subR
This instruction is to be executed.
No arguments are required.
take two Real values (2 words each) at the top of B-Stack, subtract the lower value (offset = 2) from the upper value (offset = 0) and put the result Real value (2 words) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
suspend
This instruction is to be executed.
### NO DATA ###
tanR
This instruction is to be executed.
No arguments are required.
replace a Real value (2 words) at the top of B-Stack with the Real value (2 words) of its tangent in Radians.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
testcaf caf1
This instruction is to be executed.
- caf1
- a CAF symbol.
check whether the memory area for the CAF of caf1 is initialized and put the Bool value (1 word) of the result on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
update descriptor1 a_size2 b_size3
This instruction is to be executed.
- descriptor1
- a Descriptor symbol for unboxed array, or '_' otherwise.
- a_size2
- a number (zero or positive integer) of thunks in an element of array.
- b_size3
- a number (zero or positive integer) of words of basic values in an element of array.
take (and remove) an evaluated thunk (which is an array) (*1) at the top of A-Stack; take (and remove) an Int value (*2) at the top of B-Stack; take (and remove) thunks and basic values (*3) according to a_size2 and b_size3 from the top of A-Stack and B-Stack respectively; update the array of *1 at the offset of *2 with the values of *3.
Descriptor1 indicates the descriptor of the element of the array if the array is an unboxed array.
A-Stack changes in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap changes in this operation.
updatepop_a a_offset1 a_offset2
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update A-Stack at the offset of a_offset2 with a thunk at the offset of a_offset1 in A-Stack; remove a_offset1 number of thunks from the top of A-Stack.
'updatepop_a' = 'update_a' + 'pop_a'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
updatepop_b b_offset1 b_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- b_offset2
- an offset index (zero or positive integer) from the top of B-Stack.
update B-Stack at the offset of b_offset2 with a word at the offset of b_offset1 in B-Stack; remove b_offset1 number of words from the top of B-Stack.
'updatepop_b' = 'update_b' + 'pop_b'
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
updateS
This instruction is to be executed.
### NO DATA ###
update_a a_offset1 a_offset2
This instruction is to be executed.
- a_offset1
- an offset index (zero or positive integer) from the top of A-Stack.
- a_offset2
- an offset index (zero or positive integer) from the top of A-Stack.
update A-Stack at the offset of a_offset2 with a thunk at the offset of a_offset1 in A-Stack.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
update_b b_offset1 b_offset2
This instruction is to be executed.
- b_offset1
- an offset index (zero or positive integer) from the top of B-Stack.
- b_offset2
- an offset index (zero or positive integer) from the top of B-Stack.
update B-Stack at the offset of b_offset2 with a word at the offset of b_offset1 in B-Stack.
A-Stack changes in this operation.
B-Stack does not change in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
xor%
This instruction is to be executed.
No arguments are required.
take two Int values (1 word each) at the top of B-Stack, take the bitwise exclusive OR of them and put the result Int value (1 word) on the top of B-Stack.
A-Stack does not change in this operation.
B-Stack changes in this operation.
C-Stack does not change in this operation.
Heap does not change in this operation.
.a
This instruction is to define a label or a static data record.
### NO DATA ###
.caf caf1 a_size2 b_size3
This instruction is to define a label or a static data record.
- caf1
- a CAF symbol.
- a_size2
- a number (zero or positive integer) of arguments in A-Stack.
- b_size3
- a number (zero or positive integer) of words of arguments in B-Stack.
define a static memory area for CAF consisting of a_size2 number of thunks and b_size3 number of words of basic values.
.code
This instruction is to define a label or a static data record.
### NO DATA ###
.comp version option
This instruction is to define a label or a static data record.
- version
- (probably) abc machine version. Only the value of 919 is found through implementing and testing CleanJ.
- option
- 9 elements of array of two character '0' and '1.'
The detail is not known.
This instruction is still being investigated.
.d
This instruction is to define a label or a static data record.
### NO DATA ###
.depend
This instruction is to define a label or a static data record.
### NO DATA ###
.desc descriptor1 label2 label3 arity4 lazyflag5 "name6"
This instruction is to define a label or a static data record.
- descriptor1
- a Descriptor symbol.
- label2
- a label for an address in the program code area.
- label3
- a label for an address in the program code area.
- arity4
- a number (zero or positive integer) of arity.
- lazyflag5
- 0 or 1 (not known in detail)
- "name6"
- a double-quoted string literal.
define a Descriptor with a lazy function entry (label2), a curried function entry (label3), a number of argument thunks (arity4) and a string expression ("name6").
What lazyflag5 stands for is not known.
The difference between '.desc' and '.descexp' is not known.
This instruction is still being investigated.
.descexp descriptor1 label2 label3 arity4 lazyflag5 "name6"
This instruction is to define a label or a static data record.
- descriptor1
- a Descriptor symbol.
- label2
- a label for an address in the program code area.
- label3
- a label for an address in the program code area.
- arity4
- a number (zero or positive integer) of arity.
- lazyflag5
- 0 or 1 (not known in detail)
- "name6"
- a double-quoted string literal.
define a Descriptor with a lazy function entry (label2), a curried function entry (label3), a number of argument thunks (arity4) and a string expression ("name6").
What lazyflag5 stands for is not known.
The difference between '.desc' and '.descexp' is not known.
This instruction is still being investigated.
.descn descriptor1 label2 arity3 lazyflag4 "name5"
This instruction is to define a label or a static data record.
- descriptor1
- a Descriptor symbol.
- label2
- a label for an address in the program code area.
- arity3
- a number (zero or positive integer) of arity.
- lazyflag4
- 0 or 1 (not known in detail)
- "name5"
- a double-quoted string literal.
define a Descriptor with a lazy function entry (label2), a number of argument thunks (arity3) and a string expression ("name5").
What lazyflag4 stands for is not known.
This instruction is used only for a function of constructing a record.
This instruction is still being investigated.
.end
This instruction is to define a label or a static data record.
### NO DATA ###
.endinfo
This instruction is to define a label or a static data record.
### NO DATA ###
.export
This instruction is to define a label or a static data record.
### NO DATA ###
.keep
This instruction is to define a label or a static data record.
### NO DATA ###
.inline
This instruction is to define a label or a static data record.
### NO DATA ###
.impdesc
This instruction is to define a label or a static data record.
### NO DATA ###
.implab
This instruction is to define a label or a static data record.
### NO DATA ###
.implib
This instruction is to define a label or a static data record.
### NO DATA ###
.impobj
This instruction is to define a label or a static data record.
### NO DATA ###
.module module1 "string2" "string3"
This instruction is to define a label or a static data record.
- module1
- a Module symbol.
- "string2"
- double-quoted string literal which represents the name of module.
- "string3"
- double-quoted string literal which represents the timestamp of compilation in the 'YYYYMMDDHHMISS' format.
define a module data record.
.n
This instruction is to define a label or a static data record.
### NO DATA ###
.newlocallabel
This instruction is to define a label or a static data record.
### NO DATA ###
.nu
This instruction is to define a label or a static data record.
### NO DATA ###
.n_string
This instruction is to define a label or a static data record.
### NO DATA ###
.o
This instruction is to define a label or a static data record.
### NO DATA ###
.pb
This instruction is to define a label or a static data record.
### NO DATA ###
.pd
This instruction is to define a label or a static data record.
### NO DATA ###
.pe
This instruction is to define a label or a static data record.
### NO DATA ###
.pl
This instruction is to define a label or a static data record.
### NO DATA ###
.pld
This instruction is to define a label or a static data record.
### NO DATA ###
.pn
This instruction is to define a label or a static data record.
### NO DATA ###
.pt
This instruction is to define a label or a static data record.
### NO DATA ###
.record descriptor1 type_spec2 a_size3 b_size4 "name5"
This instruction is to define a label or a static data record.
- descriptor1
- a Descriptor symbol.
- type_spec2
- a string for specifying types of elements of a record.
- a_size3
- a number (zero or positive integer) of thunks in a record.
- b_size4
- a number (zero or positive integer) of words of basic values in a record.
- "name5"
- a double-quoted string literal.
define a Descriptor for a record type with a_size3 number of thunks, b_size4 number of words of basic values and a string expression ("name5").
Each character in type_spec2 corresponds a type of each element in a record. The meanings of characters are as follows:
i | !Int (1 word) |
c | !Char (1 word) |
r | !Real (2 words) |
b | !Bool (1 word) |
a | any type (a thunk) |
In addtion, the beginning of type_spec2 has an extra meaning:
lR | indicating that the record is a cons of an unboxed strict list. |
d | still unclear |
This instruction is still being investigated.
.start label1
This instruction is to define a label or a static data record.
- label1
- a label for an address of an entry point of Start function, or '_nostart_' if no Start function exists.
specify an entry point of Start function.
.string label1 "string1"
This instruction is to define a label or a static data record.
- label1
- a label of this data record.
- "string1"
- double-quoted string literal.
define a data record which has a string value of "string1."