cvsuser 01/09/17 19:06:39
Modified: . basic_opcodes.ops opcode_table
t euclid.pasm
Log:
Resurrected register-const ops per Dan's request.
Revision Changes Path
1.20 +153 -0 parrot/basic_opcodes.ops
Index: basic_opcodes.ops
===================================================================
RCS file: /home/perlcvs/parrot/basic_opcodes.ops,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -w -r1.19 -r1.20
--- basic_opcodes.ops 2001/09/17 23:35:53 1.19
+++ basic_opcodes.ops 2001/09/18 02:06:39 1.20
@@ -56,6 +56,15 @@
}
}
+/* EQ Ix, CONSTANT, EQ_BRANCH, NE_BRANCH */
+MANUAL_OP eq_ic_ic {
+ if (INT_REG(P1) == P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
/* NE Ix, Iy, NE_BRANCH, EQ_BRANCH */
MANUAL_OP ne_i_ic {
if (INT_REG(P1) != INT_REG(P2)) {
@@ -65,6 +74,15 @@
}
}
+/* NE Ix, CONSTANT, NE_BRANCH, EQ_BRANCH */
+MANUAL_OP ne_ic_ic {
+ if (INT_REG(P1) != P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
/* LT Ix, Iy, LT_BRANCH, GE_BRANCH */
MANUAL_OP lt_i_ic {
if (INT_REG(P1) < INT_REG(P2)) {
@@ -74,6 +92,15 @@
}
}
+/* LT Ix, CONSTANT, LT_BRANCH, GE_BRANCH */
+MANUAL_OP lt_ic_ic {
+ if (INT_REG(P1) < P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
/* LE Ix, Iy, LE_BRANCH, GT_BRANCH */
MANUAL_OP le_i_ic {
if (INT_REG(P1) <= INT_REG(P2)) {
@@ -83,6 +110,15 @@
}
}
+/* LE Ix, CONSTANT, LE_BRANCH, GT_BRANCH */
+MANUAL_OP le_ic_ic {
+ if (INT_REG(P1) <= P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
/* GT Ix, Iy, GT_BRANCH, LE_BRANCH */
MANUAL_OP gt_i_ic {
if (INT_REG(P1) > INT_REG(P2)) {
@@ -92,6 +128,15 @@
}
}
+/* GT Ix, CONSTANT, GT_BRANCH, LE_BRANCH */
+MANUAL_OP gt_ic_ic {
+ if (INT_REG(P1) > P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
/* GE Ix, Iy, GE_BRANCH, LT_BRANCH */
MANUAL_OP ge_i_ic {
if (INT_REG(P1) >= INT_REG(P2)) {
@@ -101,6 +146,15 @@
}
}
+/* GE Ix, CONSTANT, GE_BRANCH, LT_BRANCH */
+MANUAL_OP ge_ic_ic {
+ if (INT_REG(P1) >= P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
/* IF IXx, TRUE_BRANCH, FALSE_BRANCH */
MANUAL_OP if_i_ic {
if (INT_REG(P1)) {
@@ -193,6 +247,105 @@
/* EQ Nx, Ny, EQ_BRANCH, NE_BRANCH */
MANUAL_OP eq_n_ic {
if (NUM_REG(P1) == NUM_REG(P2)) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* EQ Nx, CONSTANT, EQ_BRANCH, NE_BRANCH */
+MANUAL_OP eq_nc_ic {
+ if (NUM_REG(P1) == P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* NE Nx, Ny, NE_BRANCH, EQ_BRANCH */
+MANUAL_OP ne_n_ic {
+ if (NUM_REG(P1) != NUM_REG(P2)) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* NE Nx, CONSTANT, NE_BRANCH, EQ_BRANCH */
+MANUAL_OP ne_nc_ic {
+ if (NUM_REG(P1) != P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* LT Nx, Ny, LT_BRANCH, GE_BRANCH */
+MANUAL_OP lt_n_ic {
+ if (NUM_REG(P1) < NUM_REG(P2)) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* LT Nx, CONSTANT, LT_BRANCH, GE_BRANCH */
+MANUAL_OP lt_nc_ic {
+ if (NUM_REG(P1) < P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* LE Nx, Ny, LE_BRANCH, GT_BRANCH */
+MANUAL_OP le_n_ic {
+ if (NUM_REG(P1) <= NUM_REG(P2)) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* LE Nx, CONSTANT, LE_BRANCH, GT_BRANCH */
+MANUAL_OP le_nc_ic {
+ if (NUM_REG(P1) <= P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* GT Nx, Ny, GT_BRANCH, LE_BRANCH */
+MANUAL_OP gt_n_ic {
+ if (NUM_REG(P1) > NUM_REG(P2)) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* GT Nx, CONSTANT, GT_BRANCH, LE_BRANCH */
+MANUAL_OP gt_nc_ic {
+ if (NUM_REG(P1) > P2) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* GE Nx, Ny, GE_BRANCH, LT_BRANCH */
+MANUAL_OP ge_n_ic {
+ if (NUM_REG(P1) >= NUM_REG(P2)) {
+ RETURN(P3);
+ } else {
+ RETURN(P4);
+ }
+}
+
+/* GE Nx, CONSTANT, GE_BRANCH, LT_BRANCH */
+MANUAL_OP ge_nc_ic {
+ if (NUM_REG(P1) >= P2) {
RETURN(P3);
} else {
RETURN(P4);
1.18 +21 -3 parrot/opcode_table
Index: opcode_table
===================================================================
RCS file: /home/perlcvs/parrot/opcode_table,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -w -r1.17 -r1.18
--- opcode_table 2001/09/17 23:35:53 1.17
+++ opcode_table 2001/09/18 02:06:39 1.18
@@ -19,7 +19,7 @@
# S String register
# D Destination
#
-# $Id: opcode_table,v 1.17 2001/09/17 23:35:53 mon Exp $
+# $Id: opcode_table,v 1.18 2001/09/18 02:06:39 gregor Exp $
#
@@ -63,15 +63,33 @@
substr_s_s_i 4 S S I I
concat_s 2 S S
-# Comparators
+# Comparators (TODO: String comparators)
eq_i_ic 4 I I D D
-eq_n_ic 4 N N D D
+eq_ic_ic 4 I i D D
ne_i_ic 4 I I D D
+ne_ic_ic 4 I i D D
lt_i_ic 4 I I D D
+lt_ic_ic 4 I i D D
le_i_ic 4 I I D D
+le_ic_ic 4 I i D D
gt_i_ic 4 I I D D
+gt_ic_ic 4 I i D D
ge_i_ic 4 I I D D
+ge_ic_ic 4 I i D D
+
+eq_n_ic 4 N N D D
+eq_nc_ic 4 N n D D
+ne_n_ic 4 N N D D
+ne_nc_ic 4 N n D D
+lt_n_ic 4 N N D D
+lt_nc_ic 4 N n D D
+le_n_ic 4 N N D D
+le_nc_ic 4 N n D D
+gt_n_ic 4 N N D D
+gt_nc_ic 4 N n D D
+ge_n_ic 4 N N D D
+ge_nc_ic 4 N n D D
# Flow control
1.3 +1 -3 parrot/t/euclid.pasm
Index: euclid.pasm
===================================================================
RCS file: /home/perlcvs/parrot/t/euclid.pasm,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -w -r1.2 -r1.3
--- euclid.pasm 2001/09/13 14:34:28 1.2
+++ euclid.pasm 2001/09/18 02:06:39 1.3
@@ -12,7 +12,6 @@
#
# I1: m
# I2: n
-# I3: zero
# I4: r
#
# E1: Find remainder.
@@ -21,11 +20,10 @@
#
main: set I1, 96
set I2, 64
- set I3, 0
set S1, "Algorithm E (Euclid's algorithm)"
print S1
e1: mod I4, I1, I2
-e2: eq I4, I3, done, e3
+e2: eq I4, 0, done, e3
e3: set I1, I2
set I2, I4
branch e1