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
  
  
  

Reply via email to