# opcode function table
#
# format is:
# name args arg_types
#
# Opcode number is determined at build time
#
# All fields should be whitespace separated
#
# The arg_types are the types to be packed (integer, number, whatever)
# not the type of the register or anything. So N3 is still an i, since that
# 3 specifying the register should be packed as an integer.
# Revised arg types:
# i Integer constant
# I Integer register
# n Numeric constant
# N Numeric register
# s String constant?
# S String register
# D Destination
#
# $Id: opcode_table,v 1.22 2001/09/24 16:27:48 gregor Exp $
#
# This must be opcode zero
end 0
# Integer ops
set_i_ic 2 I i
set_i 2 I I
add_i 3 I I I
sub_i 3 I I I
mul_i 3 I I I
div_i 3 I I I
mod_i 3 I I I
inc_i 1 I
inc_i_ic 2 I i
dec_i 1 I
dec_i_ic 2 I i
# NUM ops
set_n_nc 2 N n
set_n 2 N N
add_n 3 N N N
sub_n 3 N N N
mul_n 3 N N N
div_n 3 N N N
inc_n 1 N
inc_n_nc 2 N n
dec_n 1 N
dec_n_nc 2 N n
# String ops
set_s_sc 2 S s
print_s 1 S
print_sc 1 s
length_i_s 2 I S
chopn_s_ic 2 S i
substr_s_s_i 4 S S I I
concat_s 2 S S
# Comparators (TODO: String comparators)
eq_i_ic 3 I I D
eq_ic_ic 3 I i D
ne_i_ic 3 I I D
ne_ic_ic 3 I i D
lt_i_ic 3 I I D
lt_ic_ic 3 I i D
le_i_ic 3 I I D
le_ic_ic 3 I i D
gt_i_ic 3 I I D
gt_ic_ic 3 I i D
ge_i_ic 3 I I D
ge_ic_ic 3 I i D
eq_n_ic 3 N N D
eq_nc_ic 3 N n D
ne_n_ic 3 N N D
ne_nc_ic 3 N n D
lt_n_ic 3 N N D
lt_nc_ic 3 N n D
le_n_ic 3 N N D
le_nc_ic 3 N n D
gt_n_ic 3 N N D
gt_nc_ic 3 N n D
ge_n_ic 3 N N D
ge_nc_ic 3 N n D
# Flow control
jump_i 1 I
branch_ic 1 D
if_i_ic 2 I D
if_n_ic 2 N D
# Convertors
iton_n_i 2 N I
ntoi_i_n 2 I N
# Miscellaneous and debugging ops
time_i 1 I
print_i 1 I
print_ic 1 i
time_n 1 N
print_n 1 N
print_nc 1 n
noop 0
# Register ops
push_i 0
push_s 0
push_n 0
push_p 0
pop_i 0
pop_s 0
pop_n 0
pop_p 0
clear_i 0
clear_s 0
clear_n 0
clear_p 0
# Transcendental Math Ops
sin_n_n 2 N N
cos_n_n 2 N N
tan_n_n 2 N N
sec_n_n 2 N N
atan_n_n 2 N N
atan2_n_n_n 3 N N N
asin_n_n 2 N N
acos_n_n 2 N N
asec_n_n 2 N N
cosh_n_n 2 N N
sinh_n_n 2 N N
tanh_n_n 2 N N
sech_n_n 2 N N
log2_n_n 2 N N
log10_n_n 2 N N
ln_n_n 2 N N
exp_n_n 2 N N
pow_n_n_n 3 N N N
sin_n_i 2 N I
cos_n_i 2 N I
tan_n_i 2 N I
sec_n_i 2 N I
atan_n_i 2 N I
atan2_n_n_i 3 N N I
atan2_n_i_n 3 N I N
atan2_n_i_i 3 N I I
asin_n_i 2 N I
acos_n_i 2 N I
asec_n_i 2 N I
cosh_n_i 2 N I
sinh_n_i 2 N I
tanh_n_i 2 N I
sech_n_i 2 N I
log2_n_i 2 N I
log10_n_i 2 N I
ln_n_i 2 N I
exp_n_i 2 N I
pow_n_n_i 3 N N I
pow_n_i_i 3 N I I
pow_n_i_n 3 N I N
# Bitwise Ops
and_i 3 I I I
not_i 2 I I
or_i 3 I I I
shl_i_ic 3 I I i
shr_i_ic 3 I I i
xor_i 3 I I I