Assign numbers to the bytecodes. Place all unary codes into one group.

This commit is contained in:
Jesse D. McDonald 2009-11-11 00:23:27 -06:00
parent d80e0c1fd3
commit 0005ef2f86
1 changed files with 104 additions and 103 deletions

View File

@ -4,119 +4,120 @@ top:
1xxxxxxx out in in: conditional
expression: up to 64, 1 out, 2 in
00000000 out sub in: unary-expr
00000001 out sub in: unary-float-expr
00xxxxxx out in in: binary-expr, x > 1
unary-expr: up to 255, 1 out, 1 in
(set! out in)
(set! out (car in))
(set! out (cdr in))
(set! out (unbox in))
(set! out (not in)) ; if in == #f then #t else #f
(set! out (nil? in)) ; value => bool
(set! out (pair? in)) ; value => bool
(set! out (box? in)) ; value => bool
(set! out (vector? in)) ; value => bool
(set! out (byte-string? in)) ; value => bool
(set! out (struct? in)) ; value => bool
(set! out (fixnum? in)) ; value => bool
(set! out (float? in)) ; value => bool
(set! out (make-box in)) ; value => box
(set! out (make-struct in)) ; metastruct => struct
(set! out (make-float in)) ; fixnum => float
(set! out (lambda in)) ; template-or-lambda => lambda
(set! out (fix- in)) ; two's complement / arithmetic negation
(set! out (bit-not in)) ; one's complement / bitwise negation
unary-float-expr: up to 255, 1 out, 1 in
(set! out (float- in))
00 invalid / permanently reserved
01 (set! out in)
02 (set! out (car in))
03 (set! out (cdr in))
04 (set! out (unbox in))
05 (set! out (not in)) ; if in == #f then #t else #f
06 (set! out (nil? in)) ; value => bool
07 (set! out (pair? in)) ; value => bool
08 (set! out (box? in)) ; value => bool
09 (set! out (vector? in)) ; value => bool
0a (set! out (byte-string? in)) ; value => bool
0b (set! out (struct? in)) ; value => bool
0c (set! out (fixnum? in)) ; value => bool
0d (set! out (float? in)) ; value => bool
0e (set! out (make-box in)) ; value => box
0f (set! out (make-struct in)) ; metastruct => struct
10 (set! out (make-float in)) ; fixnum => float
11 (set! out (lambda in)) ; template-or-lambda => lambda
12 (set! out (bit-not in)) ; one's complement / bitwise negation
13 (set! out (fix- in)) ; two's complement / arithmetic negation
14 (set! out (float- in)) ; floating-point negation
; ISO C
(set! out (acos in))
(set! out (asin in))
(set! out (atan in))
(set! out (cos in))
(set! out (sin in))
(set! out (tan in))
(set! out (cosh in))
(set! out (sinh in))
(set! out (tanh in))
(set! out (exp in))
(set! out (frexp in)) ; float => (float . fixnum)
(set! out (log in)) ; base e
(set! out (log10 in))
(set! out (modf in)) ; float => (float . float)
(set! out (sqrt in))
(set! out (ceil in))
(set! out (fabs in))
(set! out (floor in))
; ISO C floating-point
20 (set! out (acos in))
21 (set! out (asin in))
22 (set! out (atan in))
23 (set! out (cos in))
24 (set! out (sin in))
25 (set! out (tan in))
26 (set! out (cosh in))
27 (set! out (sinh in))
28 (set! out (tanh in))
29 (set! out (exp in))
2a (set! out (frexp in)) ; float => (float . fixnum)
2b (set! out (log in)) ; base e
2c (set! out (log10 in))
2d (set! out (modf in)) ; float => (float . float)
2e (set! out (sqrt in))
2f (set! out (ceil in))
30 (set! out (fabs in))
31 (set! out (floor in))
; SVID & X/Open
(set! out (erf in))
(set! out (erfc in))
40 (set! out (erf in))
41 (set! out (erfc in))
; (set! out (gamma in)) ; obsolete
(set! out (j0 in))
(set! out (j1 in))
(set! out (lgamma in)) ; float => (float . fixnum), actually lgamma_r
(set! out (y0 in))
(set! out (y1 in))
42 (set! out (j0 in))
43 (set! out (j1 in))
44 (set! out (lgamma in)) ; float => (float . fixnum), actually lgamma_r
45 (set! out (y0 in))
46 (set! out (y1 in))
; SVID & XPG 4.2/5
(set! out (asinh in))
(set! out (acosh in))
(set! out (atanh in))
(set! out (cbrt in))
(set! out (logb in))
47 (set! out (asinh in))
48 (set! out (acosh in))
49 (set! out (atanh in))
4a (set! out (cbrt in))
4b (set! out (logb in))
; XPG 4.2/5
(set! out (expm1 in))
(set! out (ilogb in))
(set! out (log1p in))
4c (set! out (expm1 in))
4d (set! out (ilogb in))
4e (set! out (log1p in))
; (set! out (rint in)) ; implies changing rounding mode; use floor or ceil
binary-expr: up to 64, 1 out, 2 in
(set! out (cons in1 in2)) ; car cdr
(set! out (make-vector in1 in2)) ; nelem iv, nelem >= 0
(set! out (make-byte-string in1 in2)) ; nbytes iv, nbytes >= 0
(set! out (vector-ref in1 in2)) ; vector n, 0 <= n < nelem
(set! out (byte-string-ref in1 in2)) ; string n, 0 <= n < nbytes
(set! out (struct-ref in1 in2)) ; struct n, 0 <= n < nslots
(set! out (eq? in1 in2)) ; any values; superset of (fix= in2 in1)
(set! out (fix+ in1 in2))
(set! out (fix- in1 in2))
(set! out (fix* in1 in2))
(set! out (fix/ in1 in2))
(set! out (fix% in1 in2))
(set! out (fix< in1 in2)) ; == (fix> in2 in1)
(set! out (fix>= in1 in2)) ; == (fix<= in2 in1)
(set! out (bit-and in1 in2))
(set! out (bit-or in1 in2))
(set! out (bit-xor in1 in2))
(set! out (fix<< in1 in2)) ; arithmetic left-shift (2*x) w/ overflow into sign
(set! out (fix>> in1 in2)) ; arithmetic right-shift (x/2)
(set! out (fix>>> in1 in2)) ; logical right-shift; sign becomes zero (+)
(set! out (float+ in1 in2))
(set! out (float- in1 in2))
(set! out (float* in1 in2))
(set! out (float/ in1 in2))
(set! out (float< in1 in2)) ; == (float> in2 in1)
(set! out (float>= in1 in2)) ; == (float<= in2 in1)
(set! out (atan2 in1 in2)) ; float float
(set! out (pow in1 in2)) ; float float
(set! out (ldexp in1 in2)) ; float fixnum
(set! out (fmod in1 in2)) ; float float
(set! out (hypot in1 in2)) ; float float
(set! out (jn in1 in2)) ; fixnum float
(set! out (yn in1 in2)) ; fixnum float
(set! out (nextafter in1 in2)) ; float float
(set! out (remainder in1 in2)) ; float float
(set! out (scalb in1 in2)) ; float float
binary-expr: up to 63 (01..3f), 1 out, 2 in
00 unary-expr
01 (set! out (cons in1 in2)) ; car cdr
02 (set! out (make-vector in1 in2)) ; nelem iv, nelem >= 0
03 (set! out (make-byte-string in1 in2)) ; nbytes iv, nbytes >= 0
04 (set! out (vector-ref in1 in2)) ; vector n, 0 <= n < nelem
05 (set! out (byte-string-ref in1 in2)) ; string n, 0 <= n < nbytes
06 (set! out (struct-ref in1 in2)) ; struct n, 0 <= n < nslots
07 (set! out (eq? in1 in2)) ; any values; superset of (fix= in2 in1)
08 (set! out (fix+ in1 in2))
09 (set! out (fix- in1 in2))
0a (set! out (fix* in1 in2))
0b (set! out (fix/ in1 in2))
0c (set! out (fix% in1 in2))
0d (set! out (fix< in1 in2)) ; == (fix> in2 in1)
0e (set! out (fix>= in1 in2)) ; == (fix<= in2 in1)
0f (set! out (bit-and in1 in2))
10 (set! out (bit-or in1 in2))
11 (set! out (bit-xor in1 in2))
12 (set! out (fix<< in1 in2)) ; arithmetic left-shift (2*x) w/ overflow into sign
13 (set! out (fix>> in1 in2)) ; arithmetic right-shift (x/2)
14 (set! out (fix>>> in1 in2)) ; logical right-shift; sign becomes zero (+)
15 (set! out (float+ in1 in2))
16 (set! out (float- in1 in2))
17 (set! out (float* in1 in2))
18 (set! out (float/ in1 in2))
19 (set! out (float< in1 in2)) ; == (float> in2 in1)
1a (set! out (float>= in1 in2)) ; == (float<= in2 in1)
1b (set! out (atan2 in1 in2)) ; float float
1c (set! out (pow in1 in2)) ; float float
1d (set! out (ldexp in1 in2)) ; float fixnum
1e (set! out (fmod in1 in2)) ; float float
1f (set! out (hypot in1 in2)) ; float float
20 (set! out (jn in1 in2)) ; fixnum float
21 (set! out (yn in1 in2)) ; fixnum float
22 (set! out (nextafter in1 in2)) ; float float
23 (set! out (remainder in1 in2)) ; float float
24 (set! out (scalb in1 in2)) ; float float
conditional: 1AAAAAAA; 1 out, 2 in + fA
(set! out (if fA in1 in2)) ; in2 if fA == #f, in1 otherwise
statement: up to 64, 3 in
(set-box! in in) ; box value
(set-car! in in) ; pair value
(set-cdr! in in) ; pair value
(vector-set! in in in) ; vector n value, 0 <= n < nelem
(byte-string-set! in in in) ; string n value, 0 <= n < nbytes
(struct-set! in in in) ; struct n value, 1 <= n < nslots
AA (set! out (if fA in1 in2)) ; in2 if fA == #f, in1 otherwise
statement: up to 64 (40..7f), 3 in
40 (set-box! in in) ; box value
41 (set-car! in in) ; pair value
42 (set-cdr! in in) ; pair value
60 (vector-set! in in in) ; vector n value, 0 <= n < nelem
61 (byte-string-set! in in in) ; string n value, 0 <= n < nbytes
62 (struct-set! in in in) ; struct n value, 0 <= n < nslots
in:
nil (00000000) [g0, always NIL]