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)