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):

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:

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)
aany type (a thunk)

In addtion, the beginning of type_spec2 has an extra meaning:

lRindicating that the record is a cons of an unboxed strict list.
dstill 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."