cvsuser     04/05/18 05:11:58

  Modified:    classes  ref.pmc sharedref.pmc
               ops      math.ops
               src      mmd.c
               .        vtable.tbl
  Log:
  mmd_vtables 12 - MMDify _float opcode variants
  
  Revision  Changes    Path
  1.17      +7 -1      parrot/classes/ref.pmc
  
  Index: ref.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/ref.pmc,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -w -r1.16 -r1.17
  --- ref.pmc   18 May 2004 08:58:56 -0000      1.16
  +++ ref.pmc   18 May 2004 12:11:46 -0000      1.17
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: ref.pmc,v 1.16 2004/05/18 08:58:56 leo Exp $
  +$Id: ref.pmc,v 1.17 2004/05/18 12:11:46 leo Exp $
   
   =head1 NAME
   
  @@ -32,16 +32,22 @@
   #define VTABLE_bitwise_xor_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_BXOR_INT)
   #define VTABLE_add(i, l, r, d) mmd_dispatch_v_ppp(i, l, r, d, MMD_ADD)
   #define VTABLE_add_int(i, l, r, d) mmd_dispatch_v_pip(i, l, r, d, MMD_ADD_INT)
  +#define VTABLE_add_float(i, l, r, d) mmd_dispatch_v_pnp(i, l, r, d, MMD_ADD_FLOAT)
   #define VTABLE_subtract(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_SUBTRACT)
   #define VTABLE_subtract_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_SUBTRACT_INT)
  +#define VTABLE_subtract_float(i,l,r,d) 
mmd_dispatch_v_pnp(i,l,r,d,MMD_SUBTRACT_FLOAT)
   #define VTABLE_multiply(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_MULTIPLY)
   #define VTABLE_multiply_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_MULTIPLY_INT)
  +#define VTABLE_multiply_float(i,l,r,d) 
mmd_dispatch_v_pnp(i,l,r,d,MMD_MULTIPLY_FLOAT)
   #define VTABLE_divide(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_DIVIDE)
   #define VTABLE_divide_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_DIVIDE_INT)
  +#define VTABLE_divide_float(i,l,r,d) mmd_dispatch_v_pnp(i,l,r,d,MMD_DIVIDE_FLOAT)
   #define VTABLE_modulus(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_MOD)
   #define VTABLE_modulus_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_MOD_INT)
  +#define VTABLE_modulus_float(i,l,r,d) mmd_dispatch_v_pnp(i,l,r,d,MMD_MOD_FLOAT)
   #define VTABLE_cmodulus(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_CMOD)
   #define VTABLE_cmodulus_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_CMOD_INT)
  +#define VTABLE_cmodulus_float(i,l,r,d) mmd_dispatch_v_pnp(i,l,r,d,MMD_CMOD_FLOAT)
   #define VTABLE_bitwise_and(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_BAND)
   #define VTABLE_bitwise_and_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_BAND_INT)
   #define VTABLE_bitwise_ors(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_SOR)
  
  
  
  1.15      +7 -1      parrot/classes/sharedref.pmc
  
  Index: sharedref.pmc
  ===================================================================
  RCS file: /cvs/public/parrot/classes/sharedref.pmc,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -w -r1.14 -r1.15
  --- sharedref.pmc     18 May 2004 08:58:56 -0000      1.14
  +++ sharedref.pmc     18 May 2004 12:11:46 -0000      1.15
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: sharedref.pmc,v 1.14 2004/05/18 08:58:56 leo Exp $
  +$Id: sharedref.pmc,v 1.15 2004/05/18 12:11:46 leo Exp $
   
   =head1 NAME
   
  @@ -44,16 +44,22 @@
   #define VTABLE_bitwise_xor_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_BXOR_INT)
   #define VTABLE_add(i, l, r, d) mmd_dispatch_v_ppp(i, l, r, d, MMD_ADD)
   #define VTABLE_add_int(i, l, r, d) mmd_dispatch_v_pip(i, l, r, d, MMD_ADD_INT)
  +#define VTABLE_add_float(i, l, r, d) mmd_dispatch_v_pnp(i, l, r, d, MMD_ADD_FLOAT)
   #define VTABLE_subtract(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_SUBTRACT)
   #define VTABLE_subtract_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_SUBTRACT_INT)
  +#define VTABLE_subtract_float(i,l,r,d) 
mmd_dispatch_v_pnp(i,l,r,d,MMD_SUBTRACT_FLOAT)
   #define VTABLE_multiply(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_MULTIPLY)
   #define VTABLE_multiply_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_MULTIPLY_INT)
  +#define VTABLE_multiply_float(i,l,r,d) 
mmd_dispatch_v_pnp(i,l,r,d,MMD_MULTIPLY_FLOAT)
   #define VTABLE_divide(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_DIVIDE)
   #define VTABLE_divide_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_DIVIDE_INT)
  +#define VTABLE_divide_float(i,l,r,d) mmd_dispatch_v_pnp(i,l,r,d,MMD_DIVIDE_FLOAT)
   #define VTABLE_modulus(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_MOD)
   #define VTABLE_modulus_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_MOD_INT)
  +#define VTABLE_modulus_float(i,l,r,d) mmd_dispatch_v_pnp(i,l,r,d,MMD_MOD_FLOAT)
   #define VTABLE_cmodulus(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_CMOD)
   #define VTABLE_cmodulus_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_CMOD_INT)
  +#define VTABLE_cmodulus_float(i,l,r,d) mmd_dispatch_v_pnp(i,l,r,d,MMD_CMOD_FLOAT)
   #define VTABLE_bitwise_and(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_BAND)
   #define VTABLE_bitwise_and_int(i,l,r,d) mmd_dispatch_v_pip(i,l,r,d,MMD_BAND_INT)
   #define VTABLE_bitwise_ors(i,l,r,d) mmd_dispatch_v_ppp(i,l,r,d,MMD_SOR)
  
  
  
  1.23      +10 -11    parrot/ops/math.ops
  
  Index: math.ops
  ===================================================================
  RCS file: /cvs/public/parrot/ops/math.ops,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -w -r1.22 -r1.23
  --- math.ops  18 May 2004 08:59:01 -0000      1.22
  +++ math.ops  18 May 2004 12:11:50 -0000      1.23
  @@ -151,7 +151,7 @@
   }
   
   inline op add(in PMC, in NUM) :base_core {
  -  $1->vtable->add_float(interpreter, $1, $2, $1);
  +  mmd_dispatch_v_pnp(interpreter, $1, $2, $1, MMD_ADD_FLOAT);
     goto NEXT();
   }
   
  @@ -181,8 +181,7 @@
   }
   
   inline op add(in PMC, in PMC, in NUM) :base_core {
  -/*  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_ADD_NUM);*/
  -  $2->vtable->add_float(interpreter, $2, $3, $1);
  +  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_ADD_FLOAT);
     goto NEXT();
   }
   
  @@ -252,7 +251,7 @@
   }
   
   inline op cmod(in PMC, in PMC, in NUM) :base_core {
  -  $2->vtable->cmodulus_float(interpreter, $2, $3, $1);
  +  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_CMOD_FLOAT);
     goto NEXT();
   }
   
  @@ -378,7 +377,7 @@
   }
   
   inline op div (in PMC, in NUM) :base_core {
  -  $1->vtable->divide_float(interpreter, $1, $2, $1);
  +  mmd_dispatch_v_pnp(interpreter, $1, $2, $1, MMD_DIVIDE_FLOAT);
     goto NEXT();
   }
   
  @@ -403,7 +402,7 @@
   }
   
   inline op div (in PMC, in PMC, in NUM) :base_core {
  -  $2->vtable->divide_float(interpreter, $2, $3, $1);
  +  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_DIVIDE_FLOAT);
     goto NEXT();
   }
   
  @@ -555,7 +554,7 @@
   }
   
   inline op mod(in PMC, in PMC, in NUM) :base_core {
  -  $2->vtable->modulus_float(interpreter, $2, $3, $1);
  +  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_MOD_FLOAT);
     goto NEXT();
   }
   
  @@ -637,7 +636,7 @@
   }
   
   inline op mul ( in PMC, in NUM ) :base_core {
  -  $1->vtable->multiply_float(interpreter, $1, $2, $1);
  +  mmd_dispatch_v_pnp(interpreter, $1, $2, $1, MMD_MULTIPLY_FLOAT);
     goto NEXT();
   }
   
  @@ -667,7 +666,7 @@
   }
   
   inline op mul (in PMC, in PMC, in NUM) :base_core {
  -  $2->vtable->multiply_float(interpreter, $2, $3, $1);
  +  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_MULTIPLY_FLOAT);
     goto NEXT();
   }
   
  @@ -813,7 +812,7 @@
   }
   
   inline op sub(in PMC, in NUM) :base_core {
  -  $1->vtable->subtract_float(interpreter, $1, $2, $1);
  +  mmd_dispatch_v_pnp(interpreter, $1, $2, $1, MMD_SUBTRACT_FLOAT);
     goto NEXT();
   }
   
  @@ -843,7 +842,7 @@
   }
   
   inline op sub(in PMC, in PMC, in NUM) :base_core {
  -  $2->vtable->subtract_float(interpreter, $2, $3, $1);
  +  mmd_dispatch_v_pnp(interpreter, $2, $3, $1, MMD_SUBTRACT_FLOAT);
     goto NEXT();
   }
   
  
  
  
  1.38      +59 -1     parrot/src/mmd.c
  
  Index: mmd.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/mmd.c,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -w -r1.37 -r1.38
  --- mmd.c     10 May 2004 10:18:54 -0000      1.37
  +++ mmd.c     18 May 2004 12:11:54 -0000      1.38
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2003 The Perl Foundation.  All Rights Reserved.
  -$Id: mmd.c,v 1.37 2004/05/10 10:18:54 leo Exp $
  +$Id: mmd.c,v 1.38 2004/05/18 12:11:54 leo Exp $
   
   =head1 NAME
   
  @@ -45,6 +45,8 @@
   
   typedef void    (*mmd_f_v_ppp)(Interp *, PMC *, PMC *, PMC *);
   typedef void    (*mmd_f_v_pip)(Interp *, PMC *, INTVAL, PMC *);
  +typedef void    (*mmd_f_v_pnp)(Interp *, PMC *, FLOATVAL, PMC *);
  +typedef void    (*mmd_f_v_psp)(Interp *, PMC *, STRING *, PMC *);
   typedef INTVAL  (*mmd_f_i_pp) (Interp *, PMC *, PMC *);
   
   #ifndef NDEBUG
  @@ -179,6 +181,18 @@
   
   Like above, right argument is a native INTVAL.
   
  +=item C<void
  +mmd_dispatch_v_pnp(Interp *interpreter,
  +              PMC *left, FLOATVAL right, PMC *dest, INTVAL function)>
  +
  +Like above, right argument is a native FLOATVAL.
  +
  +=item C<void
  +mmd_dispatch_v_psp(Interp *interpreter,
  +              PMC *left, STRING *right, PMC *dest, INTVAL function)>
  +
  +Like above, right argument is a native STRING *.
  +
   =cut
   
   */
  @@ -219,6 +233,50 @@
       if (is_pmc) {
           sub = (PMC*)real_function;
           Parrot_runops_fromc_args_save(interpreter, sub, "vPIP",
  +                left, right, dest);
  +    }
  +    else {
  +        (*real_function)(interpreter, left, right, dest);
  +    }
  +}
  +
  +void
  +mmd_dispatch_v_pnp(Interp *interpreter,
  +              PMC *left, FLOATVAL right, PMC *dest, INTVAL function)
  +{
  +    mmd_f_v_pnp real_function;
  +    PMC *sub;
  +    int is_pmc;
  +    UINTVAL left_type;
  +
  +    left_type = left->vtable->base_type;
  +    real_function = (mmd_f_v_pnp)get_mmd_dispatch_type(interpreter,
  +            left_type, 0, function, &is_pmc);
  +    if (is_pmc) {
  +        sub = (PMC*)real_function;
  +        Parrot_runops_fromc_args_save(interpreter, sub, "vPNP",
  +                left, right, dest);
  +    }
  +    else {
  +        (*real_function)(interpreter, left, right, dest);
  +    }
  +}
  +
  +void
  +mmd_dispatch_v_psp(Interp *interpreter,
  +              PMC *left, STRING *right, PMC *dest, INTVAL function)
  +{
  +    mmd_f_v_psp real_function;
  +    PMC *sub;
  +    int is_pmc;
  +    UINTVAL left_type;
  +
  +    left_type = left->vtable->base_type;
  +    real_function = (mmd_f_v_psp)get_mmd_dispatch_type(interpreter,
  +            left_type, 0, function, &is_pmc);
  +    if (is_pmc) {
  +        sub = (PMC*)real_function;
  +        Parrot_runops_fromc_args_save(interpreter, sub, "vPSP",
                   left, right, dest);
       }
       else {
  
  
  
  1.61      +7 -7      parrot/vtable.tbl
  
  Index: vtable.tbl
  ===================================================================
  RCS file: /cvs/public/parrot/vtable.tbl,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -w -r1.60 -r1.61
  --- vtable.tbl        18 May 2004 08:59:06 -0000      1.60
  +++ vtable.tbl        18 May 2004 12:11:58 -0000      1.61
  @@ -1,4 +1,4 @@
  -# $Id: vtable.tbl,v 1.60 2004/05/18 08:59:06 leo Exp $
  +# $Id: vtable.tbl,v 1.61 2004/05/18 12:11:58 leo Exp $
   # [MAIN] #default section name
   
   void init()
  @@ -145,32 +145,32 @@
   void add(PMC* value, PMC* dest)             MMD_ADD
   void add_int(INTVAL value, PMC* dest)       MMD_ADD_INT
   void add_bignum(BIGNUM* value, PMC* dest)
  -void add_float(FLOATVAL value, PMC* dest)
  +void add_float(FLOATVAL value, PMC* dest)   MMD_ADD_FLOAT
   
   void subtract(PMC* value, PMC* dest)        MMD_SUBTRACT
   void subtract_int(INTVAL value, PMC* dest)  MMD_SUBTRACT_INT
   void subtract_bignum(BIGNUM* value, PMC* dest)
  -void subtract_float(FLOATVAL value, PMC* dest)
  +void subtract_float(FLOATVAL value, PMC* dest)  MMD_SUBTRACT_FLOAT
   
   void multiply(PMC* value, PMC* dest)        MMD_MULTIPLY
   void multiply_int(INTVAL value, PMC* dest)  MMD_MULTIPLY_INT
   void multiply_bignum(BIGNUM* value, PMC* dest)
  -void multiply_float(FLOATVAL value, PMC* dest)
  +void multiply_float(FLOATVAL value, PMC* dest)  MMD_MULTIPLY_FLOAT
   
   void divide(PMC* value, PMC* dest)           MMD_DIVIDE
   void divide_int(INTVAL value, PMC* dest)     MMD_DIVIDE_INT
   void divide_bignum(BIGNUM* value, PMC* dest)
  -void divide_float(FLOATVAL value, PMC* dest)
  +void divide_float(FLOATVAL value, PMC* dest) MMD_DIVIDE_FLOAT
   
   void modulus(PMC* value, PMC* dest)         MMD_MOD
   void modulus_int(INTVAL value, PMC* dest)   MMD_MOD_INT
   void modulus_bignum(BIGNUM* value, PMC* dest)
  -void modulus_float(FLOATVAL value, PMC* dest)
  +void modulus_float(FLOATVAL value, PMC* dest) MMD_MOD_FLOAT
   
   void cmodulus(PMC* value, PMC* dest)        MMD_CMOD
   void cmodulus_int(INTVAL value, PMC* dest)  MMD_CMOD_INT
   void cmodulus_bignum(BIGNUM* value, PMC* dest)
  -void cmodulus_float(FLOATVAL value, PMC* dest)
  +void cmodulus_float(FLOATVAL value, PMC* dest) MMD_CMOD_FLOAT
   
   void neg(PMC* dest)
   
  
  
  

Reply via email to