[svn:parrot] r46813 - in branches/ops_massacre: . src/dynoplibs src/ops t/compilers/imcc/syn t/dynoplibs t/op t/pmc

plobsing at svn.parrot.org plobsing at svn.parrot.org
Thu May 20 07:12:17 UTC 2010


Author: plobsing
Date: Thu May 20 07:12:16 2010
New Revision: 46813
URL: https://trac.parrot.org/parrot/changeset/46813

Log:
move transcendental ops to dynops

Added:
   branches/ops_massacre/src/dynoplibs/trans.ops   (contents, props changed)
   branches/ops_massacre/t/dynoplibs/trans-infnan.t   (contents, props changed)
   branches/ops_massacre/t/dynoplibs/trans-old.t   (contents, props changed)
   branches/ops_massacre/t/dynoplibs/trans.t   (contents, props changed)
Deleted:
   branches/ops_massacre/t/op/trans.t
   branches/ops_massacre/t/op/trans_old.t
Modified:
   branches/ops_massacre/MANIFEST
   branches/ops_massacre/src/dynoplibs/Defines.in
   branches/ops_massacre/src/dynoplibs/Rules.in
   branches/ops_massacre/src/dynoplibs/math.ops
   branches/ops_massacre/src/ops/math.ops
   branches/ops_massacre/src/ops/ops.num
   branches/ops_massacre/t/compilers/imcc/syn/op.t
   branches/ops_massacre/t/dynoplibs/obscure.t
   branches/ops_massacre/t/op/arithmetics.t
   branches/ops_massacre/t/op/arithmetics_pmc.t
   branches/ops_massacre/t/op/inf_nan.t
   branches/ops_massacre/t/op/sprintf.t
   branches/ops_massacre/t/pmc/complex.t
   branches/ops_massacre/t/pmc/integer.t
   branches/ops_massacre/t/pmc/sub.t

Modified: branches/ops_massacre/MANIFEST
==============================================================================
--- branches/ops_massacre/MANIFEST	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/MANIFEST	Thu May 20 07:12:16 2010	(r46813)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Thu May 20 00:41:03 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu May 20 06:44:30 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -1244,6 +1244,7 @@
 src/dynoplibs/deprecated.ops                                []
 src/dynoplibs/math.ops                                      []
 src/dynoplibs/obscure.ops                                   []
+src/dynoplibs/trans.ops                                     []
 src/dynpmc/Defines.in                                       []
 src/dynpmc/README.pod                                       []doc
 src/dynpmc/Rules.in                                         []
@@ -1629,6 +1630,9 @@
 t/dynoplibs/deprecated.t                                    [test]
 t/dynoplibs/math.t                                          [test]
 t/dynoplibs/obscure.t                                       [test]
+t/dynoplibs/trans-infnan.t                                  [test]
+t/dynoplibs/trans-old.t                                     [test]
+t/dynoplibs/trans.t                                         [test]
 t/dynpmc/dynlexpad.t                                        [test]
 t/dynpmc/file.t                                             [test]
 t/dynpmc/foo.t                                              [test]
@@ -1789,8 +1793,6 @@
 t/op/sysinfo.t                                              [test]
 t/op/time.t                                                 [test]
 t/op/time_old.t                                             [test]
-t/op/trans.t                                                [test]
-t/op/trans_old.t                                            [test]
 t/op/vivify.t                                               [test]
 t/perl/Parrot_Distribution.t                                [test]
 t/perl/Parrot_Docs.t                                        [test]

Modified: branches/ops_massacre/src/dynoplibs/Defines.in
==============================================================================
--- branches/ops_massacre/src/dynoplibs/Defines.in	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/src/dynoplibs/Defines.in	Thu May 20 07:12:16 2010	(r46813)
@@ -2,6 +2,7 @@
     $(DYNEXT_DIR)/obscure_ops$(LOAD_EXT) \
     $(DYNEXT_DIR)/math_ops$(LOAD_EXT) \
     $(DYNEXT_DIR)/deprecated_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/trans_ops$(LOAD_EXT) \
 
 DYNOPLIBS_CLEANUPS = \
     src/dynoplibs/*.c \

Modified: branches/ops_massacre/src/dynoplibs/Rules.in
==============================================================================
--- branches/ops_massacre/src/dynoplibs/Rules.in	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/src/dynoplibs/Rules.in	Thu May 20 07:12:16 2010	(r46813)
@@ -47,3 +47,16 @@
 
 src/dynoplibs/deprecated_ops.c: src/dynoplibs/deprecated.ops $(BUILD_TOOLS_DIR)/ops2c.pl
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/deprecated.ops
+
+$(DYNEXT_DIR)/trans_ops$(LOAD_EXT): src/dynoplibs/trans_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/trans_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/trans_ops$(O): $(DYNOP_O_DEPS) \
+    src/dynoplibs/trans_ops.c src/dynoplibs/trans_ops.h
+
+src/dynoplibs/trans_ops.h: src/dynoplibs/trans_ops.c
+
+src/dynoplibs/trans_ops.c: src/dynoplibs/trans.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/trans.ops

Modified: branches/ops_massacre/src/dynoplibs/math.ops
==============================================================================
--- branches/ops_massacre/src/dynoplibs/math.ops	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/src/dynoplibs/math.ops	Thu May 20 07:12:16 2010	(r46813)
@@ -25,7 +25,13 @@
 
 =cut
 
-=over
+###############################################################################
+
+=head2 Pseudorandom number operations
+
+These operations perform various pseudorandom number operations.
+
+=over 4
 
 =item B<rand>(out NUM)
 
@@ -109,6 +115,8 @@
 
 =back
 
+=cut
+
 =head1 COPYRIGHT
 
 Copyright (C) 2001-2009, Parrot Foundation.

Added: branches/ops_massacre/src/dynoplibs/trans.ops
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_massacre/src/dynoplibs/trans.ops	Thu May 20 07:12:16 2010	(r46813)
@@ -0,0 +1,320 @@
+/*
+ * $Id$
+ * trans.ops
+ */
+
+=head1 NAME
+
+trans.ops - Transcendental Opcodes
+
+=head1 DESCRIPTION
+
+Addition library of operations to perform various transcendental operations such
+as logarithmics and trigonometrics.
+
+To use this library of ops, add this directive to your PIR:
+
+  .loadlib 'trans_ops'
+
+=over 4
+
+=cut
+
+########################################
+
+=item B<acos>(out NUM, in NUM)
+
+Set $1 to the arc cosine (in radians) of $2.
+
+=cut
+
+inline op acos(out NUM, in NUM) :base_math {
+    $1 = acos((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<asec>(out NUM, in NUM)
+
+Set $1 to the arc secant (in radians) of $2.
+
+=cut
+
+inline op asec(out NUM, in NUM) :base_math {
+    $1 = acos(((FLOATVAL)1) / ((FLOATVAL)$2));
+}
+
+########################################
+
+
+=item B<asin>(out NUM, in NUM)
+
+Set $1 to the arc sine (in radians) of $2.
+
+=cut
+
+inline op asin(out NUM, in NUM) :base_math {
+    $1 = asin((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<atan>(out NUM, in NUM)
+
+=item B<atan>(out NUM, in NUM, in NUM)
+
+The two-argument versions set $1 to the arc tangent (in radians) of $2.
+
+The three-argument versions set $1 to the arc tangent (in radians) of
+$2 / $3, taking account of the signs of the arguments in determining the
+quadrant of the result.
+
+=cut
+
+inline op atan(out NUM, in NUM) :base_math {
+    $1 = atan((FLOATVAL)$2);
+}
+
+inline op atan(out NUM, in NUM, in NUM) :base_math {
+    $1 = atan2((FLOATVAL)$2, (FLOATVAL)$3);
+}
+
+########################################
+
+=item B<cos>(out NUM, in NUM)
+
+Set $1 to the cosine of $2 (given in radians).
+
+=cut
+
+inline op cos(out NUM, in NUM) :base_math {
+    $1 = cos((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<cosh>(out NUM, in NUM)
+
+Set $1 to the hyperbolic cosine of $2 (given in radians).
+
+=cut
+
+inline op cosh(out NUM, in NUM) :base_math {
+    $1 = cosh((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<exp>(out NUM, in NUM)
+
+Set $1 to I<e> raised to the power $2. I<e> is the base of the natural
+logarithm.
+
+=cut
+
+inline op exp(out NUM, in NUM) :base_math {
+    $1 = exp((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<ln>(out NUM, in NUM)
+
+Set $1 to the natural (base I<e>) logarithm of $2.
+
+=cut
+
+inline op ln(out NUM, in NUM) :base_math {
+    $1 = log((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<log10>(out NUM, in NUM)
+
+Set $1 to the base 10 logarithm of $2.
+
+=cut
+
+inline op log10(out NUM, in NUM) :base_math {
+    $1 = log10((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<log2>(out NUM, in NUM)
+
+Set $1 to the base 2 logarithm of $2.
+
+=cut
+
+op log2(out NUM, in NUM) :base_math {
+    FLOATVAL temp = log((FLOATVAL)2.0);
+    $1 = log((FLOATVAL)$2) / temp;
+}
+
+########################################
+
+=item B<sec>(out NUM, in NUM)
+
+Set $1 to the secant of $2 (given in radians).
+
+=cut
+
+inline op sec(out NUM, in NUM) :base_math {
+    $1 = ((FLOATVAL)1) / cos((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<sech>(out NUM, in NUM)
+
+Set $1 to the hyperbolic secant of $2 (given in radians).
+
+=cut
+
+inline op sech(out NUM, in NUM) :base_math {
+    $1 = ((FLOATVAL)1) / cosh((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<sin>(out NUM, in NUM)
+
+Set $1 to the sine of $2 (given in radians).
+
+=cut
+
+inline op sin(out NUM, in NUM) :base_math {
+    $1 = sin((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<sinh>(out NUM, in NUM)
+
+Set $1 to the hyperbolic sine of $2 (given in radians).
+
+=cut
+
+inline op sinh(out NUM, in NUM) :base_math {
+    $1 = sinh((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<tan>(out NUM, in NUM)
+
+Set $1 to the tangent of $2 (given in radians).
+
+=cut
+
+inline op tan(out NUM, in NUM) :base_math {
+    $1 = tan((FLOATVAL)$2);
+}
+
+########################################
+
+=item B<tanh>(out NUM, in NUM)
+
+Set $1 to the hyperbolic tangent of $2 (given in radians).
+
+=cut
+
+inline op tanh(out NUM, in NUM) :base_math {
+    $1 = tanh((FLOATVAL)$2);
+}
+
+=item B<pow>(out NUM, in NUM, in NUM)
+
+=item B<pow>(out NUM, in NUM, in INT)
+
+=item B<pow>(invar PMC, invar PMC, invar PMC)
+
+=item B<pow>(invar PMC, invar PMC, in INT)
+
+=item B<pow>(invar PMC, invar PMC, in NUM)
+
+Set $1 to $2 raised to the power $3.
+
+=cut
+
+inline op pow(out NUM, in NUM, in NUM) :base_core {
+    $1 = pow((FLOATVAL)$2, (FLOATVAL)$3);
+}
+
+inline op pow(invar PMC, invar PMC, invar PMC) :base_core {
+    const FLOATVAL a = VTABLE_get_number(interp, $2);
+    const FLOATVAL b = VTABLE_get_number(interp, $3);
+    const FLOATVAL c = pow(a, b);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    else
+        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
+    VTABLE_set_number_native(interp, $1, c);
+}
+
+inline op pow(invar PMC, invar PMC, in INT) :base_core {
+    const FLOATVAL a = VTABLE_get_number(interp, $2);
+    const FLOATVAL b = (FLOATVAL)$3;
+    const FLOATVAL c = pow(a, b);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    else
+        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
+    VTABLE_set_number_native(interp, $1, c);
+}
+
+inline op pow(invar PMC, invar PMC, in NUM) :base_core {
+    const FLOATVAL a = VTABLE_get_number(interp, $2);
+    const FLOATVAL c = pow(a, $3);
+    if (PMC_IS_NULL($1))
+        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
+    else
+        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
+    VTABLE_set_number_native(interp, $1, c);
+}
+
+inline op pow(out NUM, in NUM, in INT) :base_core {
+    FLOATVAL n2 = $2;
+    FLOATVAL res = 1.0;
+    INTVAL   e  = $3;
+    int s = 1;
+    if (e != 0) {
+        if (e < 0) {
+            s = -1;
+            e = -e;
+        }
+    }
+    while (e) {
+        if (e & 1) {
+            res *= n2;
+        }
+        n2 *= n2;
+        e >>= 1;
+    }
+    if (s < 0) {
+        res = 1.0/res;
+    }
+    $1 = res;
+}
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (C) 2010-2010, Parrot Foundation.
+
+=head1 LICENSE
+
+This program is free software. It is subject to the same license
+as the Parrot interpreter itself.
+
+=cut
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/ops_massacre/src/ops/math.ops
==============================================================================
--- branches/ops_massacre/src/ops/math.ops	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/src/ops/math.ops	Thu May 20 07:12:16 2010	(r46813)
@@ -11,8 +11,8 @@
 
 =head1 DESCRIPTION
 
-Operations that perform some sort of mathematics, including both basic
-math and transcendental functions.
+Operations that perform basic mathematics. See F<src/dynoplibs/> for more
+advanced operations.
 
 =head2 Arithmetic operations
 
@@ -787,82 +787,6 @@
 
 ########################################
 
-=item B<pow>(out NUM, in NUM, in NUM)
-
-=item B<pow>(out NUM, in NUM, in INT)
-
-=item B<pow>(invar PMC, invar PMC, invar PMC)
-
-=item B<pow>(invar PMC, invar PMC, in INT)
-
-=item B<pow>(invar PMC, invar PMC, in NUM)
-
-Set $1 to $2 raised to the power $3.
-
-=cut
-
-inline op pow(out NUM, in NUM, in NUM) :base_core {
-    $1 = pow((FLOATVAL)$2, (FLOATVAL)$3);
-}
-
-inline op pow(invar PMC, invar PMC, invar PMC) :base_core {
-    const FLOATVAL a = VTABLE_get_number(interp, $2);
-    const FLOATVAL b = VTABLE_get_number(interp, $3);
-    const FLOATVAL c = pow(a, b);
-    if (PMC_IS_NULL($1))
-        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
-    else
-        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
-    VTABLE_set_number_native(interp, $1, c);
-}
-
-inline op pow(invar PMC, invar PMC, in INT) :base_core {
-    const FLOATVAL a = VTABLE_get_number(interp, $2);
-    const FLOATVAL b = (FLOATVAL)$3;
-    const FLOATVAL c = pow(a, b);
-    if (PMC_IS_NULL($1))
-        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
-    else
-        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
-    VTABLE_set_number_native(interp, $1, c);
-}
-
-inline op pow(invar PMC, invar PMC, in NUM) :base_core {
-    const FLOATVAL a = VTABLE_get_number(interp, $2);
-    const FLOATVAL c = pow(a, $3);
-    if (PMC_IS_NULL($1))
-        $1 = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Float));
-    else
-        $1 = Parrot_pmc_new(interp, $1->vtable->base_type);
-    VTABLE_set_number_native(interp, $1, c);
-}
-
-inline op pow(out NUM, in NUM, in INT) :base_core {
-    FLOATVAL n2 = $2;
-    FLOATVAL res = 1.0;
-    INTVAL   e  = $3;
-    int s = 1;
-    if (e != 0) {
-        if (e < 0) {
-            s = -1;
-            e = -e;
-        }
-    }
-    while (e) {
-        if (e & 1) {
-            res *= n2;
-        }
-        n2 *= n2;
-        e >>= 1;
-    }
-    if (s < 0) {
-        res = 1.0/res;
-    }
-    $1 = res;
-}
-
-########################################
-
 =item B<sub>(inout INT, in INT)
 
 =item B<sub>(inout NUM, in NUM)
@@ -945,228 +869,6 @@
 
 =cut
 
-
-
-###############################################################################
-
-=head2 Transcendental mathematical operations
-
-These operations perform various transcendental operations such as logarithmics
-and trigonometrics.
-
-=over 4
-
-=cut
-
-########################################
-
-=item B<acos>(out NUM, in NUM)
-
-Set $1 to the arc cosine (in radians) of $2.
-
-=cut
-
-inline op acos(out NUM, in NUM) :base_math {
-    $1 = acos((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<asec>(out NUM, in NUM)
-
-Set $1 to the arc secant (in radians) of $2.
-
-=cut
-
-inline op asec(out NUM, in NUM) :base_math {
-    $1 = acos(((FLOATVAL)1) / ((FLOATVAL)$2));
-}
-
-########################################
-
-
-=item B<asin>(out NUM, in NUM)
-
-Set $1 to the arc sine (in radians) of $2.
-
-=cut
-
-inline op asin(out NUM, in NUM) :base_math {
-    $1 = asin((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<atan>(out NUM, in NUM)
-
-=item B<atan>(out NUM, in NUM, in NUM)
-
-The two-argument versions set $1 to the arc tangent (in radians) of $2.
-
-The three-argument versions set $1 to the arc tangent (in radians) of
-$2 / $3, taking account of the signs of the arguments in determining the
-quadrant of the result.
-
-=cut
-
-inline op atan(out NUM, in NUM) :base_math {
-    $1 = atan((FLOATVAL)$2);
-}
-
-inline op atan(out NUM, in NUM, in NUM) :base_math {
-    $1 = atan2((FLOATVAL)$2, (FLOATVAL)$3);
-}
-
-########################################
-
-=item B<cos>(out NUM, in NUM)
-
-Set $1 to the cosine of $2 (given in radians).
-
-=cut
-
-inline op cos(out NUM, in NUM) :base_math {
-    $1 = cos((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<cosh>(out NUM, in NUM)
-
-Set $1 to the hyperbolic cosine of $2 (given in radians).
-
-=cut
-
-inline op cosh(out NUM, in NUM) :base_math {
-    $1 = cosh((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<exp>(out NUM, in NUM)
-
-Set $1 to I<e> raised to the power $2. I<e> is the base of the natural
-logarithm.
-
-=cut
-
-inline op exp(out NUM, in NUM) :base_math {
-    $1 = exp((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<ln>(out NUM, in NUM)
-
-Set $1 to the natural (base I<e>) logarithm of $2.
-
-=cut
-
-inline op ln(out NUM, in NUM) :base_math {
-    $1 = log((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<log10>(out NUM, in NUM)
-
-Set $1 to the base 10 logarithm of $2.
-
-=cut
-
-inline op log10(out NUM, in NUM) :base_math {
-    $1 = log10((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<log2>(out NUM, in NUM)
-
-Set $1 to the base 2 logarithm of $2.
-
-=cut
-
-op log2(out NUM, in NUM) :base_math {
-    FLOATVAL temp = log((FLOATVAL)2.0);
-    $1 = log((FLOATVAL)$2) / temp;
-}
-
-########################################
-
-=item B<sec>(out NUM, in NUM)
-
-Set $1 to the secant of $2 (given in radians).
-
-=cut
-
-inline op sec(out NUM, in NUM) :base_math {
-    $1 = ((FLOATVAL)1) / cos((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<sech>(out NUM, in NUM)
-
-Set $1 to the hyperbolic secant of $2 (given in radians).
-
-=cut
-
-inline op sech(out NUM, in NUM) :base_math {
-    $1 = ((FLOATVAL)1) / cosh((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<sin>(out NUM, in NUM)
-
-Set $1 to the sine of $2 (given in radians).
-
-=cut
-
-inline op sin(out NUM, in NUM) :base_math {
-    $1 = sin((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<sinh>(out NUM, in NUM)
-
-Set $1 to the hyperbolic sine of $2 (given in radians).
-
-=cut
-
-inline op sinh(out NUM, in NUM) :base_math {
-    $1 = sinh((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<tan>(out NUM, in NUM)
-
-Set $1 to the tangent of $2 (given in radians).
-
-=cut
-
-inline op tan(out NUM, in NUM) :base_math {
-    $1 = tan((FLOATVAL)$2);
-}
-
-########################################
-
-=item B<tanh>(out NUM, in NUM)
-
-Set $1 to the hyperbolic tangent of $2 (given in radians).
-
-=cut
-
-inline op tanh(out NUM, in NUM) :base_math {
-    $1 = tanh((FLOATVAL)$2);
-}
-
-=back
-
-=cut
-
 ###############################################################################
 
 =head1 COPYRIGHT

Modified: branches/ops_massacre/src/ops/ops.num
==============================================================================
--- branches/ops_massacre/src/ops/ops.num	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/src/ops/ops.num	Thu May 20 07:12:16 2010	(r46813)
@@ -657,568 +657,537 @@
 neg_i_i                         633
 neg_n_n                         634
 neg_p_p                         635
-pow_n_n_n                       636
-pow_n_nc_n                      637
-pow_n_n_nc                      638
-pow_p_p_p                       639
-pow_p_p_i                       640
-pow_p_p_ic                      641
-pow_p_p_n                       642
-pow_p_p_nc                      643
-pow_n_n_i                       644
-pow_n_nc_i                      645
-pow_n_n_ic                      646
-pow_n_nc_ic                     647
-sub_i_i                         648
-sub_i_ic                        649
-sub_n_n                         650
-sub_n_nc                        651
-sub_p_p                         652
-sub_p_i                         653
-sub_p_ic                        654
-sub_p_n                         655
-sub_p_nc                        656
-sub_i_i_i                       657
-sub_i_ic_i                      658
-sub_i_i_ic                      659
-sub_n_n_n                       660
-sub_n_nc_n                      661
-sub_n_n_nc                      662
-sub_p_p_p                       663
-sub_p_p_i                       664
-sub_p_p_ic                      665
-sub_p_p_n                       666
-sub_p_p_nc                      667
-sqrt_n_n                        668
-acos_n_n                        669
-asec_n_n                        670
-asin_n_n                        671
-atan_n_n                        672
-atan_n_n_n                      673
-atan_n_nc_n                     674
-atan_n_n_nc                     675
-cos_n_n                         676
-cosh_n_n                        677
-exp_n_n                         678
-ln_n_n                          679
-log10_n_n                       680
-log2_n_n                        681
-sec_n_n                         682
-sech_n_n                        683
-sin_n_n                         684
-sinh_n_n                        685
-tan_n_n                         686
-tanh_n_n                        687
-callmethodcc_p_s                688
-callmethodcc_p_sc               689
-callmethodcc_p_p                690
-callmethod_p_s_p                691
-callmethod_p_sc_p               692
-callmethod_p_p_p                693
-tailcallmethod_p_s              694
-tailcallmethod_p_sc             695
-tailcallmethod_p_p              696
-addmethod_p_s_p                 697
-addmethod_p_sc_p                698
-can_i_p_s                       699
-can_i_p_sc                      700
-does_i_p_s                      701
-does_i_p_sc                     702
-does_i_p_p                      703
-does_i_p_pc                     704
-isa_i_p_s                       705
-isa_i_p_sc                      706
-isa_i_p_p                       707
-isa_i_p_pc                      708
-newclass_p_s                    709
-newclass_p_sc                   710
-newclass_p_p                    711
-newclass_p_pc                   712
-subclass_p_p                    713
-subclass_p_pc                   714
-subclass_p_p_s                  715
-subclass_p_pc_s                 716
-subclass_p_p_sc                 717
-subclass_p_pc_sc                718
-subclass_p_p_p                  719
-subclass_p_pc_p                 720
-subclass_p_p_pc                 721
-subclass_p_pc_pc                722
-subclass_p_s                    723
-subclass_p_sc                   724
-subclass_p_s_s                  725
-subclass_p_sc_s                 726
-subclass_p_s_sc                 727
-subclass_p_sc_sc                728
-subclass_p_s_p                  729
-subclass_p_sc_p                 730
-subclass_p_s_pc                 731
-subclass_p_sc_pc                732
-get_class_p_s                   733
-get_class_p_sc                  734
-get_class_p_p                   735
-get_class_p_pc                  736
-class_p_p                       737
-addparent_p_p                   738
-removeparent_p_p                739
-addrole_p_p                     740
-addattribute_p_s                741
-addattribute_p_sc               742
-removeattribute_p_s             743
-removeattribute_p_sc            744
-getattribute_p_p_s              745
-getattribute_p_p_sc             746
-getattribute_p_p_p_s            747
-getattribute_p_p_pc_s           748
-getattribute_p_p_p_sc           749
-getattribute_p_p_pc_sc          750
-setattribute_p_s_p              751
-setattribute_p_sc_p             752
-setattribute_p_p_s_p            753
-setattribute_p_pc_s_p           754
-setattribute_p_p_sc_p           755
-setattribute_p_pc_sc_p          756
-inspect_p_p                     757
-inspect_p_pc                    758
-inspect_p_p_s                   759
-inspect_p_pc_s                  760
-inspect_p_p_sc                  761
-inspect_p_pc_sc                 762
-new_p_s                         763
-new_p_sc                        764
-new_p_s_p                       765
-new_p_sc_p                      766
-new_p_s_pc                      767
-new_p_sc_pc                     768
-new_p_p                         769
-new_p_pc                        770
-new_p_p_p                       771
-new_p_pc_p                      772
-new_p_p_pc                      773
-new_p_pc_pc                     774
-root_new_p_p                    775
-root_new_p_pc                   776
-root_new_p_p_p                  777
-root_new_p_pc_p                 778
-root_new_p_p_pc                 779
-root_new_p_pc_pc                780
-typeof_s_p                      781
-typeof_p_p                      782
-get_repr_s_p                    783
-find_method_p_p_s               784
-find_method_p_p_sc              785
-defined_i_p                     786
-defined_i_p_ki                  787
-defined_i_p_kic                 788
-defined_i_p_k                   789
-defined_i_p_kc                  790
-exists_i_p_ki                   791
-exists_i_p_kic                  792
-exists_i_p_k                    793
-exists_i_p_kc                   794
-delete_p_k                      795
-delete_p_kc                     796
-delete_p_ki                     797
-delete_p_kic                    798
-elements_i_p                    799
-push_p_i                        800
-push_p_ic                       801
-push_p_n                        802
-push_p_nc                       803
-push_p_s                        804
-push_p_sc                       805
-push_p_p                        806
-pop_i_p                         807
-pop_n_p                         808
-pop_s_p                         809
-pop_p_p                         810
-unshift_p_i                     811
-unshift_p_ic                    812
-unshift_p_n                     813
-unshift_p_nc                    814
-unshift_p_s                     815
-unshift_p_sc                    816
-unshift_p_p                     817
-shift_i_p                       818
-shift_n_p                       819
-shift_s_p                       820
-shift_p_p                       821
-splice_p_p_i_i                  822
-splice_p_p_ic_i                 823
-splice_p_p_i_ic                 824
-splice_p_p_ic_ic                825
-setprop_p_s_p                   826
-setprop_p_sc_p                  827
-getprop_p_s_p                   828
-getprop_p_sc_p                  829
-delprop_p_s                     830
-delprop_p_sc                    831
-prophash_p_p                    832
-freeze_s_p                      833
-thaw_p_s                        834
-thaw_p_sc                       835
-add_multi_s_s_p                 836
-add_multi_sc_s_p                837
-add_multi_s_sc_p                838
-add_multi_sc_sc_p               839
-find_multi_p_s_s                840
-find_multi_p_sc_s               841
-find_multi_p_s_sc               842
-find_multi_p_sc_sc              843
-register_p                      844
-unregister_p                    845
-box_p_i                         846
-box_p_ic                        847
-box_p_n                         848
-box_p_nc                        849
-box_p_s                         850
-box_p_sc                        851
-iter_p_p                        852
-morph_p_p                       853
-morph_p_pc                      854
-clone_s_s                       855
-clone_s_sc                      856
-set_i_i                         857
-set_i_ic                        858
-set_i_n                         859
-set_i_nc                        860
-set_i_s                         861
-set_i_sc                        862
-set_n_n                         863
-set_n_nc                        864
-set_n_i                         865
-set_n_ic                        866
-set_n_s                         867
-set_n_sc                        868
-set_n_p                         869
-set_s_p                         870
-set_s_s                         871
-set_s_sc                        872
-set_s_i                         873
-set_s_ic                        874
-set_s_n                         875
-set_s_nc                        876
-set_p_pc                        877
-set_p_p                         878
-set_p_i                         879
-set_p_ic                        880
-set_p_n                         881
-set_p_nc                        882
-set_p_s                         883
-set_p_sc                        884
-set_i_p                         885
-assign_p_p                      886
-assign_p_i                      887
-assign_p_ic                     888
-assign_p_n                      889
-assign_p_nc                     890
-assign_p_s                      891
-assign_p_sc                     892
-assign_s_s                      893
-assign_s_sc                     894
-setref_p_p                      895
-deref_p_p                       896
-set_p_ki_i                      897
-set_p_kic_i                     898
-set_p_ki_ic                     899
-set_p_kic_ic                    900
-set_p_ki_n                      901
-set_p_kic_n                     902
-set_p_ki_nc                     903
-set_p_kic_nc                    904
-set_p_ki_s                      905
-set_p_kic_s                     906
-set_p_ki_sc                     907
-set_p_kic_sc                    908
-set_p_ki_p                      909
-set_p_kic_p                     910
-set_i_p_ki                      911
-set_i_p_kic                     912
-set_n_p_ki                      913
-set_n_p_kic                     914
-set_s_p_ki                      915
-set_s_p_kic                     916
-set_p_p_ki                      917
-set_p_p_kic                     918
-set_p_k_i                       919
-set_p_kc_i                      920
-set_p_k_ic                      921
-set_p_kc_ic                     922
-set_p_k_n                       923
-set_p_kc_n                      924
-set_p_k_nc                      925
-set_p_kc_nc                     926
-set_p_k_s                       927
-set_p_kc_s                      928
-set_p_k_sc                      929
-set_p_kc_sc                     930
-set_p_k_p                       931
-set_p_kc_p                      932
-set_i_p_k                       933
-set_i_p_kc                      934
-set_n_p_k                       935
-set_n_p_kc                      936
-set_s_p_k                       937
-set_s_p_kc                      938
-set_p_p_k                       939
-set_p_p_kc                      940
-clone_p_p                       941
-clone_p_p_p                     942
-clone_p_p_pc                    943
-copy_p_p                        944
-null_s                          945
-null_i                          946
-null_p                          947
-null_n                          948
-ord_i_s                         949
-ord_i_sc                        950
-ord_i_s_i                       951
-ord_i_sc_i                      952
-ord_i_s_ic                      953
-ord_i_sc_ic                     954
-chr_s_i                         955
-chr_s_ic                        956
-chopn_s_s_i                     957
-chopn_s_sc_i                    958
-chopn_s_s_ic                    959
-chopn_s_sc_ic                   960
-concat_s_s                      961
-concat_s_sc                     962
-concat_p_p                      963
-concat_p_s                      964
-concat_p_sc                     965
-concat_s_s_s                    966
-concat_s_sc_s                   967
-concat_s_s_sc                   968
-concat_p_p_s                    969
-concat_p_p_sc                   970
-concat_p_p_p                    971
-repeat_s_s_i                    972
-repeat_s_sc_i                   973
-repeat_s_s_ic                   974
-repeat_s_sc_ic                  975
-repeat_p_p_i                    976
-repeat_p_p_ic                   977
-repeat_p_p_p                    978
-repeat_p_i                      979
-repeat_p_ic                     980
-repeat_p_p                      981
-length_i_s                      982
-length_i_sc                     983
-bytelength_i_s                  984
-bytelength_i_sc                 985
-pin_s                           986
-unpin_s                         987
-substr_s_s_i                    988
-substr_s_sc_i                   989
-substr_s_s_ic                   990
-substr_s_sc_ic                  991
-substr_s_s_i_i                  992
-substr_s_sc_i_i                 993
-substr_s_s_ic_i                 994
-substr_s_sc_ic_i                995
-substr_s_s_i_ic                 996
-substr_s_sc_i_ic                997
-substr_s_s_ic_ic                998
-substr_s_sc_ic_ic               999
-substr_s_p_i_i                 1000
-substr_s_p_ic_i                1001
-substr_s_p_i_ic                1002
-substr_s_p_ic_ic               1003
-replace_s_s_i_i_s              1004
-replace_s_sc_i_i_s             1005
-replace_s_s_ic_i_s             1006
-replace_s_sc_ic_i_s            1007
-replace_s_s_i_ic_s             1008
-replace_s_sc_i_ic_s            1009
-replace_s_s_ic_ic_s            1010
-replace_s_sc_ic_ic_s           1011
-replace_s_s_i_i_sc             1012
-replace_s_sc_i_i_sc            1013
-replace_s_s_ic_i_sc            1014
-replace_s_sc_ic_i_sc           1015
-replace_s_s_i_ic_sc            1016
-replace_s_sc_i_ic_sc           1017
-replace_s_s_ic_ic_sc           1018
-replace_s_sc_ic_ic_sc          1019
-index_i_s_s                    1020
-index_i_sc_s                   1021
-index_i_s_sc                   1022
-index_i_sc_sc                  1023
-index_i_s_s_i                  1024
-index_i_sc_s_i                 1025
-index_i_s_sc_i                 1026
-index_i_sc_sc_i                1027
-index_i_s_s_ic                 1028
-index_i_sc_s_ic                1029
-index_i_s_sc_ic                1030
-index_i_sc_sc_ic               1031
-sprintf_s_s_p                  1032
-sprintf_s_sc_p                 1033
-sprintf_p_p_p                  1034
-new_s                          1035
-new_s_i                        1036
-new_s_ic                       1037
-stringinfo_i_s_i               1038
-stringinfo_i_sc_i              1039
-stringinfo_i_s_ic              1040
-stringinfo_i_sc_ic             1041
-upcase_s_s                     1042
-upcase_s_sc                    1043
-downcase_s_s                   1044
-downcase_s_sc                  1045
-titlecase_s_s                  1046
-titlecase_s_sc                 1047
-join_s_s_p                     1048
-join_s_sc_p                    1049
-split_p_s_s                    1050
-split_p_sc_s                   1051
-split_p_s_sc                   1052
-split_p_sc_sc                  1053
-charset_i_s                    1054
-charset_i_sc                   1055
-charsetname_s_i                1056
-charsetname_s_ic               1057
-find_charset_i_s               1058
-find_charset_i_sc              1059
-trans_charset_s_s_i            1060
-trans_charset_s_sc_i           1061
-trans_charset_s_s_ic           1062
-trans_charset_s_sc_ic          1063
-encoding_i_s                   1064
-encoding_i_sc                  1065
-encodingname_s_i               1066
-encodingname_s_ic              1067
-find_encoding_i_s              1068
-find_encoding_i_sc             1069
-trans_encoding_s_s_i           1070
-trans_encoding_s_sc_i          1071
-trans_encoding_s_s_ic          1072
-trans_encoding_s_sc_ic         1073
-is_cclass_i_i_s_i              1074
-is_cclass_i_ic_s_i             1075
-is_cclass_i_i_sc_i             1076
-is_cclass_i_ic_sc_i            1077
-is_cclass_i_i_s_ic             1078
-is_cclass_i_ic_s_ic            1079
-is_cclass_i_i_sc_ic            1080
-is_cclass_i_ic_sc_ic           1081
-find_cclass_i_i_s_i_i          1082
-find_cclass_i_ic_s_i_i         1083
-find_cclass_i_i_sc_i_i         1084
-find_cclass_i_ic_sc_i_i        1085
-find_cclass_i_i_s_ic_i         1086
-find_cclass_i_ic_s_ic_i        1087
-find_cclass_i_i_sc_ic_i        1088
-find_cclass_i_ic_sc_ic_i       1089
-find_cclass_i_i_s_i_ic         1090
-find_cclass_i_ic_s_i_ic        1091
-find_cclass_i_i_sc_i_ic        1092
-find_cclass_i_ic_sc_i_ic       1093
-find_cclass_i_i_s_ic_ic        1094
-find_cclass_i_ic_s_ic_ic       1095
-find_cclass_i_i_sc_ic_ic       1096
-find_cclass_i_ic_sc_ic_ic      1097
-find_not_cclass_i_i_s_i_i      1098
-find_not_cclass_i_ic_s_i_i     1099
-find_not_cclass_i_i_sc_i_i     1100
-find_not_cclass_i_ic_sc_i_i    1101
-find_not_cclass_i_i_s_ic_i     1102
-find_not_cclass_i_ic_s_ic_i    1103
-find_not_cclass_i_i_sc_ic_i    1104
-find_not_cclass_i_ic_sc_ic_i   1105
-find_not_cclass_i_i_s_i_ic     1106
-find_not_cclass_i_ic_s_i_ic    1107
-find_not_cclass_i_i_sc_i_ic    1108
-find_not_cclass_i_ic_sc_i_ic   1109
-find_not_cclass_i_i_s_ic_ic    1110
-find_not_cclass_i_ic_s_ic_ic   1111
-find_not_cclass_i_i_sc_ic_ic   1112
-find_not_cclass_i_ic_sc_ic_ic  1113
-escape_s_s                     1114
-compose_s_s                    1115
-compose_s_sc                   1116
-spawnw_i_s                     1117
-spawnw_i_sc                    1118
-spawnw_i_p                     1119
-err_i                          1120
-err_s                          1121
-err_s_i                        1122
-err_s_ic                       1123
-time_i                         1124
-time_n                         1125
-gmtime_s_i                     1126
-gmtime_s_ic                    1127
-localtime_s_i                  1128
-localtime_s_ic                 1129
-decodetime_p_i                 1130
-decodetime_p_ic                1131
-decodelocaltime_p_i            1132
-decodelocaltime_p_ic           1133
-sysinfo_s_i                    1134
-sysinfo_s_ic                   1135
-sysinfo_i_i                    1136
-sysinfo_i_ic                   1137
-sleep_i                        1138
-sleep_ic                       1139
-sleep_n                        1140
-sleep_nc                       1141
-store_lex_s_p                  1142
-store_lex_sc_p                 1143
-store_dynamic_lex_s_p          1144
-store_dynamic_lex_sc_p         1145
-find_lex_p_s                   1146
-find_lex_p_sc                  1147
-find_dynamic_lex_p_s           1148
-find_dynamic_lex_p_sc          1149
-find_caller_lex_p_s            1150
-find_caller_lex_p_sc           1151
-get_namespace_p                1152
-get_namespace_p_p              1153
-get_namespace_p_pc             1154
-get_hll_namespace_p            1155
-get_hll_namespace_p_p          1156
-get_hll_namespace_p_pc         1157
-get_root_namespace_p           1158
-get_root_namespace_p_p         1159
-get_root_namespace_p_pc        1160
-get_global_p_s                 1161
-get_global_p_sc                1162
-get_global_p_p_s               1163
-get_global_p_pc_s              1164
-get_global_p_p_sc              1165
-get_global_p_pc_sc             1166
-get_hll_global_p_s             1167
-get_hll_global_p_sc            1168
-get_hll_global_p_p_s           1169
-get_hll_global_p_pc_s          1170
-get_hll_global_p_p_sc          1171
-get_hll_global_p_pc_sc         1172
-get_root_global_p_s            1173
-get_root_global_p_sc           1174
-get_root_global_p_p_s          1175
-get_root_global_p_pc_s         1176
-get_root_global_p_p_sc         1177
-get_root_global_p_pc_sc        1178
-set_global_s_p                 1179
-set_global_sc_p                1180
-set_global_p_s_p               1181
-set_global_pc_s_p              1182
-set_global_p_sc_p              1183
-set_global_pc_sc_p             1184
-set_hll_global_s_p             1185
-set_hll_global_sc_p            1186
-set_hll_global_p_s_p           1187
-set_hll_global_pc_s_p          1188
-set_hll_global_p_sc_p          1189
-set_hll_global_pc_sc_p         1190
-set_root_global_s_p            1191
-set_root_global_sc_p           1192
-set_root_global_p_s_p          1193
-set_root_global_pc_s_p         1194
-set_root_global_p_sc_p         1195
-set_root_global_pc_sc_p        1196
-find_name_p_s                  1197
-find_name_p_sc                 1198
-find_sub_not_null_p_s          1199
-find_sub_not_null_p_sc         1200
+sub_i_i                         636
+sub_i_ic                        637
+sub_n_n                         638
+sub_n_nc                        639
+sub_p_p                         640
+sub_p_i                         641
+sub_p_ic                        642
+sub_p_n                         643
+sub_p_nc                        644
+sub_i_i_i                       645
+sub_i_ic_i                      646
+sub_i_i_ic                      647
+sub_n_n_n                       648
+sub_n_nc_n                      649
+sub_n_n_nc                      650
+sub_p_p_p                       651
+sub_p_p_i                       652
+sub_p_p_ic                      653
+sub_p_p_n                       654
+sub_p_p_nc                      655
+sqrt_n_n                        656
+callmethodcc_p_s                657
+callmethodcc_p_sc               658
+callmethodcc_p_p                659
+callmethod_p_s_p                660
+callmethod_p_sc_p               661
+callmethod_p_p_p                662
+tailcallmethod_p_s              663
+tailcallmethod_p_sc             664
+tailcallmethod_p_p              665
+addmethod_p_s_p                 666
+addmethod_p_sc_p                667
+can_i_p_s                       668
+can_i_p_sc                      669
+does_i_p_s                      670
+does_i_p_sc                     671
+does_i_p_p                      672
+does_i_p_pc                     673
+isa_i_p_s                       674
+isa_i_p_sc                      675
+isa_i_p_p                       676
+isa_i_p_pc                      677
+newclass_p_s                    678
+newclass_p_sc                   679
+newclass_p_p                    680
+newclass_p_pc                   681
+subclass_p_p                    682
+subclass_p_pc                   683
+subclass_p_p_s                  684
+subclass_p_pc_s                 685
+subclass_p_p_sc                 686
+subclass_p_pc_sc                687
+subclass_p_p_p                  688
+subclass_p_pc_p                 689
+subclass_p_p_pc                 690
+subclass_p_pc_pc                691
+subclass_p_s                    692
+subclass_p_sc                   693
+subclass_p_s_s                  694
+subclass_p_sc_s                 695
+subclass_p_s_sc                 696
+subclass_p_sc_sc                697
+subclass_p_s_p                  698
+subclass_p_sc_p                 699
+subclass_p_s_pc                 700
+subclass_p_sc_pc                701
+get_class_p_s                   702
+get_class_p_sc                  703
+get_class_p_p                   704
+get_class_p_pc                  705
+class_p_p                       706
+addparent_p_p                   707
+removeparent_p_p                708
+addrole_p_p                     709
+addattribute_p_s                710
+addattribute_p_sc               711
+removeattribute_p_s             712
+removeattribute_p_sc            713
+getattribute_p_p_s              714
+getattribute_p_p_sc             715
+getattribute_p_p_p_s            716
+getattribute_p_p_pc_s           717
+getattribute_p_p_p_sc           718
+getattribute_p_p_pc_sc          719
+setattribute_p_s_p              720
+setattribute_p_sc_p             721
+setattribute_p_p_s_p            722
+setattribute_p_pc_s_p           723
+setattribute_p_p_sc_p           724
+setattribute_p_pc_sc_p          725
+inspect_p_p                     726
+inspect_p_pc                    727
+inspect_p_p_s                   728
+inspect_p_pc_s                  729
+inspect_p_p_sc                  730
+inspect_p_pc_sc                 731
+new_p_s                         732
+new_p_sc                        733
+new_p_s_p                       734
+new_p_sc_p                      735
+new_p_s_pc                      736
+new_p_sc_pc                     737
+new_p_p                         738
+new_p_pc                        739
+new_p_p_p                       740
+new_p_pc_p                      741
+new_p_p_pc                      742
+new_p_pc_pc                     743
+root_new_p_p                    744
+root_new_p_pc                   745
+root_new_p_p_p                  746
+root_new_p_pc_p                 747
+root_new_p_p_pc                 748
+root_new_p_pc_pc                749
+typeof_s_p                      750
+typeof_p_p                      751
+get_repr_s_p                    752
+find_method_p_p_s               753
+find_method_p_p_sc              754
+defined_i_p                     755
+defined_i_p_ki                  756
+defined_i_p_kic                 757
+defined_i_p_k                   758
+defined_i_p_kc                  759
+exists_i_p_ki                   760
+exists_i_p_kic                  761
+exists_i_p_k                    762
+exists_i_p_kc                   763
+delete_p_k                      764
+delete_p_kc                     765
+delete_p_ki                     766
+delete_p_kic                    767
+elements_i_p                    768
+push_p_i                        769
+push_p_ic                       770
+push_p_n                        771
+push_p_nc                       772
+push_p_s                        773
+push_p_sc                       774
+push_p_p                        775
+pop_i_p                         776
+pop_n_p                         777
+pop_s_p                         778
+pop_p_p                         779
+unshift_p_i                     780
+unshift_p_ic                    781
+unshift_p_n                     782
+unshift_p_nc                    783
+unshift_p_s                     784
+unshift_p_sc                    785
+unshift_p_p                     786
+shift_i_p                       787
+shift_n_p                       788
+shift_s_p                       789
+shift_p_p                       790
+splice_p_p_i_i                  791
+splice_p_p_ic_i                 792
+splice_p_p_i_ic                 793
+splice_p_p_ic_ic                794
+setprop_p_s_p                   795
+setprop_p_sc_p                  796
+getprop_p_s_p                   797
+getprop_p_sc_p                  798
+delprop_p_s                     799
+delprop_p_sc                    800
+prophash_p_p                    801
+freeze_s_p                      802
+thaw_p_s                        803
+thaw_p_sc                       804
+add_multi_s_s_p                 805
+add_multi_sc_s_p                806
+add_multi_s_sc_p                807
+add_multi_sc_sc_p               808
+find_multi_p_s_s                809
+find_multi_p_sc_s               810
+find_multi_p_s_sc               811
+find_multi_p_sc_sc              812
+register_p                      813
+unregister_p                    814
+box_p_i                         815
+box_p_ic                        816
+box_p_n                         817
+box_p_nc                        818
+box_p_s                         819
+box_p_sc                        820
+iter_p_p                        821
+morph_p_p                       822
+morph_p_pc                      823
+clone_s_s                       824
+clone_s_sc                      825
+set_i_i                         826
+set_i_ic                        827
+set_i_n                         828
+set_i_nc                        829
+set_i_s                         830
+set_i_sc                        831
+set_n_n                         832
+set_n_nc                        833
+set_n_i                         834
+set_n_ic                        835
+set_n_s                         836
+set_n_sc                        837
+set_n_p                         838
+set_s_p                         839
+set_s_s                         840
+set_s_sc                        841
+set_s_i                         842
+set_s_ic                        843
+set_s_n                         844
+set_s_nc                        845
+set_p_pc                        846
+set_p_p                         847
+set_p_i                         848
+set_p_ic                        849
+set_p_n                         850
+set_p_nc                        851
+set_p_s                         852
+set_p_sc                        853
+set_i_p                         854
+assign_p_p                      855
+assign_p_i                      856
+assign_p_ic                     857
+assign_p_n                      858
+assign_p_nc                     859
+assign_p_s                      860
+assign_p_sc                     861
+assign_s_s                      862
+assign_s_sc                     863
+setref_p_p                      864
+deref_p_p                       865
+set_p_ki_i                      866
+set_p_kic_i                     867
+set_p_ki_ic                     868
+set_p_kic_ic                    869
+set_p_ki_n                      870
+set_p_kic_n                     871
+set_p_ki_nc                     872
+set_p_kic_nc                    873
+set_p_ki_s                      874
+set_p_kic_s                     875
+set_p_ki_sc                     876
+set_p_kic_sc                    877
+set_p_ki_p                      878
+set_p_kic_p                     879
+set_i_p_ki                      880
+set_i_p_kic                     881
+set_n_p_ki                      882
+set_n_p_kic                     883
+set_s_p_ki                      884
+set_s_p_kic                     885
+set_p_p_ki                      886
+set_p_p_kic                     887
+set_p_k_i                       888
+set_p_kc_i                      889
+set_p_k_ic                      890
+set_p_kc_ic                     891
+set_p_k_n                       892
+set_p_kc_n                      893
+set_p_k_nc                      894
+set_p_kc_nc                     895
+set_p_k_s                       896
+set_p_kc_s                      897
+set_p_k_sc                      898
+set_p_kc_sc                     899
+set_p_k_p                       900
+set_p_kc_p                      901
+set_i_p_k                       902
+set_i_p_kc                      903
+set_n_p_k                       904
+set_n_p_kc                      905
+set_s_p_k                       906
+set_s_p_kc                      907
+set_p_p_k                       908
+set_p_p_kc                      909
+clone_p_p                       910
+clone_p_p_p                     911
+clone_p_p_pc                    912
+copy_p_p                        913
+null_s                          914
+null_i                          915
+null_p                          916
+null_n                          917
+ord_i_s                         918
+ord_i_sc                        919
+ord_i_s_i                       920
+ord_i_sc_i                      921
+ord_i_s_ic                      922
+ord_i_sc_ic                     923
+chr_s_i                         924
+chr_s_ic                        925
+chopn_s_s_i                     926
+chopn_s_sc_i                    927
+chopn_s_s_ic                    928
+chopn_s_sc_ic                   929
+concat_s_s                      930
+concat_s_sc                     931
+concat_p_p                      932
+concat_p_s                      933
+concat_p_sc                     934
+concat_s_s_s                    935
+concat_s_sc_s                   936
+concat_s_s_sc                   937
+concat_p_p_s                    938
+concat_p_p_sc                   939
+concat_p_p_p                    940
+repeat_s_s_i                    941
+repeat_s_sc_i                   942
+repeat_s_s_ic                   943
+repeat_s_sc_ic                  944
+repeat_p_p_i                    945
+repeat_p_p_ic                   946
+repeat_p_p_p                    947
+repeat_p_i                      948
+repeat_p_ic                     949
+repeat_p_p                      950
+length_i_s                      951
+length_i_sc                     952
+bytelength_i_s                  953
+bytelength_i_sc                 954
+pin_s                           955
+unpin_s                         956
+substr_s_s_i                    957
+substr_s_sc_i                   958
+substr_s_s_ic                   959
+substr_s_sc_ic                  960
+substr_s_s_i_i                  961
+substr_s_sc_i_i                 962
+substr_s_s_ic_i                 963
+substr_s_sc_ic_i                964
+substr_s_s_i_ic                 965
+substr_s_sc_i_ic                966
+substr_s_s_ic_ic                967
+substr_s_sc_ic_ic               968
+substr_s_p_i_i                  969
+substr_s_p_ic_i                 970
+substr_s_p_i_ic                 971
+substr_s_p_ic_ic                972
+replace_s_s_i_i_s               973
+replace_s_sc_i_i_s              974
+replace_s_s_ic_i_s              975
+replace_s_sc_ic_i_s             976
+replace_s_s_i_ic_s              977
+replace_s_sc_i_ic_s             978
+replace_s_s_ic_ic_s             979
+replace_s_sc_ic_ic_s            980
+replace_s_s_i_i_sc              981
+replace_s_sc_i_i_sc             982
+replace_s_s_ic_i_sc             983
+replace_s_sc_ic_i_sc            984
+replace_s_s_i_ic_sc             985
+replace_s_sc_i_ic_sc            986
+replace_s_s_ic_ic_sc            987
+replace_s_sc_ic_ic_sc           988
+index_i_s_s                     989
+index_i_sc_s                    990
+index_i_s_sc                    991
+index_i_sc_sc                   992
+index_i_s_s_i                   993
+index_i_sc_s_i                  994
+index_i_s_sc_i                  995
+index_i_sc_sc_i                 996
+index_i_s_s_ic                  997
+index_i_sc_s_ic                 998
+index_i_s_sc_ic                 999
+index_i_sc_sc_ic               1000
+sprintf_s_s_p                  1001
+sprintf_s_sc_p                 1002
+sprintf_p_p_p                  1003
+new_s                          1004
+new_s_i                        1005
+new_s_ic                       1006
+stringinfo_i_s_i               1007
+stringinfo_i_sc_i              1008
+stringinfo_i_s_ic              1009
+stringinfo_i_sc_ic             1010
+upcase_s_s                     1011
+upcase_s_sc                    1012
+downcase_s_s                   1013
+downcase_s_sc                  1014
+titlecase_s_s                  1015
+titlecase_s_sc                 1016
+join_s_s_p                     1017
+join_s_sc_p                    1018
+split_p_s_s                    1019
+split_p_sc_s                   1020
+split_p_s_sc                   1021
+split_p_sc_sc                  1022
+charset_i_s                    1023
+charset_i_sc                   1024
+charsetname_s_i                1025
+charsetname_s_ic               1026
+find_charset_i_s               1027
+find_charset_i_sc              1028
+trans_charset_s_s_i            1029
+trans_charset_s_sc_i           1030
+trans_charset_s_s_ic           1031
+trans_charset_s_sc_ic          1032
+encoding_i_s                   1033
+encoding_i_sc                  1034
+encodingname_s_i               1035
+encodingname_s_ic              1036
+find_encoding_i_s              1037
+find_encoding_i_sc             1038
+trans_encoding_s_s_i           1039
+trans_encoding_s_sc_i          1040
+trans_encoding_s_s_ic          1041
+trans_encoding_s_sc_ic         1042
+is_cclass_i_i_s_i              1043
+is_cclass_i_ic_s_i             1044
+is_cclass_i_i_sc_i             1045
+is_cclass_i_ic_sc_i            1046
+is_cclass_i_i_s_ic             1047
+is_cclass_i_ic_s_ic            1048
+is_cclass_i_i_sc_ic            1049
+is_cclass_i_ic_sc_ic           1050
+find_cclass_i_i_s_i_i          1051
+find_cclass_i_ic_s_i_i         1052
+find_cclass_i_i_sc_i_i         1053
+find_cclass_i_ic_sc_i_i        1054
+find_cclass_i_i_s_ic_i         1055
+find_cclass_i_ic_s_ic_i        1056
+find_cclass_i_i_sc_ic_i        1057
+find_cclass_i_ic_sc_ic_i       1058
+find_cclass_i_i_s_i_ic         1059
+find_cclass_i_ic_s_i_ic        1060
+find_cclass_i_i_sc_i_ic        1061
+find_cclass_i_ic_sc_i_ic       1062
+find_cclass_i_i_s_ic_ic        1063
+find_cclass_i_ic_s_ic_ic       1064
+find_cclass_i_i_sc_ic_ic       1065
+find_cclass_i_ic_sc_ic_ic      1066
+find_not_cclass_i_i_s_i_i      1067
+find_not_cclass_i_ic_s_i_i     1068
+find_not_cclass_i_i_sc_i_i     1069
+find_not_cclass_i_ic_sc_i_i    1070
+find_not_cclass_i_i_s_ic_i     1071
+find_not_cclass_i_ic_s_ic_i    1072
+find_not_cclass_i_i_sc_ic_i    1073
+find_not_cclass_i_ic_sc_ic_i   1074
+find_not_cclass_i_i_s_i_ic     1075
+find_not_cclass_i_ic_s_i_ic    1076
+find_not_cclass_i_i_sc_i_ic    1077
+find_not_cclass_i_ic_sc_i_ic   1078
+find_not_cclass_i_i_s_ic_ic    1079
+find_not_cclass_i_ic_s_ic_ic   1080
+find_not_cclass_i_i_sc_ic_ic   1081
+find_not_cclass_i_ic_sc_ic_ic  1082
+escape_s_s                     1083
+compose_s_s                    1084
+compose_s_sc                   1085
+spawnw_i_s                     1086
+spawnw_i_sc                    1087
+spawnw_i_p                     1088
+err_i                          1089
+err_s                          1090
+err_s_i                        1091
+err_s_ic                       1092
+time_i                         1093
+time_n                         1094
+gmtime_s_i                     1095
+gmtime_s_ic                    1096
+localtime_s_i                  1097
+localtime_s_ic                 1098
+decodetime_p_i                 1099
+decodetime_p_ic                1100
+decodelocaltime_p_i            1101
+decodelocaltime_p_ic           1102
+sysinfo_s_i                    1103
+sysinfo_s_ic                   1104
+sysinfo_i_i                    1105
+sysinfo_i_ic                   1106
+sleep_i                        1107
+sleep_ic                       1108
+sleep_n                        1109
+sleep_nc                       1110
+store_lex_s_p                  1111
+store_lex_sc_p                 1112
+store_dynamic_lex_s_p          1113
+store_dynamic_lex_sc_p         1114
+find_lex_p_s                   1115
+find_lex_p_sc                  1116
+find_dynamic_lex_p_s           1117
+find_dynamic_lex_p_sc          1118
+find_caller_lex_p_s            1119
+find_caller_lex_p_sc           1120
+get_namespace_p                1121
+get_namespace_p_p              1122
+get_namespace_p_pc             1123
+get_hll_namespace_p            1124
+get_hll_namespace_p_p          1125
+get_hll_namespace_p_pc         1126
+get_root_namespace_p           1127
+get_root_namespace_p_p         1128
+get_root_namespace_p_pc        1129
+get_global_p_s                 1130
+get_global_p_sc                1131
+get_global_p_p_s               1132
+get_global_p_pc_s              1133
+get_global_p_p_sc              1134
+get_global_p_pc_sc             1135
+get_hll_global_p_s             1136
+get_hll_global_p_sc            1137
+get_hll_global_p_p_s           1138
+get_hll_global_p_pc_s          1139
+get_hll_global_p_p_sc          1140
+get_hll_global_p_pc_sc         1141
+get_root_global_p_s            1142
+get_root_global_p_sc           1143
+get_root_global_p_p_s          1144
+get_root_global_p_pc_s         1145
+get_root_global_p_p_sc         1146
+get_root_global_p_pc_sc        1147
+set_global_s_p                 1148
+set_global_sc_p                1149
+set_global_p_s_p               1150
+set_global_pc_s_p              1151
+set_global_p_sc_p              1152
+set_global_pc_sc_p             1153
+set_hll_global_s_p             1154
+set_hll_global_sc_p            1155
+set_hll_global_p_s_p           1156
+set_hll_global_pc_s_p          1157
+set_hll_global_p_sc_p          1158
+set_hll_global_pc_sc_p         1159
+set_root_global_s_p            1160
+set_root_global_sc_p           1161
+set_root_global_p_s_p          1162
+set_root_global_pc_s_p         1163
+set_root_global_p_sc_p         1164
+set_root_global_pc_sc_p        1165
+find_name_p_s                  1166
+find_name_p_sc                 1167
+find_sub_not_null_p_s          1168
+find_sub_not_null_p_sc         1169

Modified: branches/ops_massacre/t/compilers/imcc/syn/op.t
==============================================================================
--- branches/ops_massacre/t/compilers/imcc/syn/op.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/compilers/imcc/syn/op.t	Thu May 20 07:12:16 2010	(r46813)
@@ -4,7 +4,7 @@
 
 .sub test :main
     .include 'test_more.pir'
-    plan(59)
+    plan(58)
 
     test_plus_equal()
     test_minus_equal()
@@ -21,7 +21,6 @@
     test_x_defined()
     test_x_clone()
     test_x_length()
-    test_x_sin()
     test_x_can()
     test_x_isa()
     test_x_add()
@@ -174,11 +173,6 @@
     is($I0, 0, 'x = length')
 .end
 
-.sub test_x_sin
-    $N0 = sin 0
-    is($N0, 0, 'x = sin')
-.end
-
 .sub test_x_can
     $P0 = new 'FileHandle'
     $I0 = can $P0, "puts"

Modified: branches/ops_massacre/t/dynoplibs/obscure.t
==============================================================================
--- branches/ops_massacre/t/dynoplibs/obscure.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/dynoplibs/obscure.t	Thu May 20 07:12:16 2010	(r46813)
@@ -17,6 +17,8 @@
 =cut
 
 .loadlib 'obscure_ops'
+.loadlib 'trans_ops'    # needed for atan
+
 .sub main :main
     .include 'fp_equality.pasm'
     .include 'test_more.pir'

Added: branches/ops_massacre/t/dynoplibs/trans-infnan.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_massacre/t/dynoplibs/trans-infnan.t	Thu May 20 07:12:16 2010	(r46813)
@@ -0,0 +1,332 @@
+#!./parrot
+# Copyright (C) 2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/dynoplibs/trans-infnan.t - Test Trans Dynops
+
+=head1 SYNOPSIS
+
+    %prove t/dynoplibs/trans-infnan.t
+
+=head1 DESCRIPTION
+
+Tests for C<Inf> and C<NaN> handling of transcendental ops in the C<trans_ops> dynlib.
+
+=cut
+
+.loadlib 'trans_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+    plan(67)
+
+    test_exp()
+    test_sin()
+    test_sinh()
+    test_asin()
+    test_cos()
+    test_cosh()
+    test_acos()
+    test_tan()
+    test_tanh()
+    test_atan()
+    test_cot()
+    test_coth()
+    test_acot()
+    test_sec()
+    test_sech()
+    test_asec()
+    test_ln()
+    test_log10()
+    test_log2()
+    test_pow()
+.end
+
+.sub test_exp
+    $N0 = 'Inf'
+    $N1 = exp $N0
+    is($N1, 'Inf', 'exp: exp Inf')
+    $N0 = '-Inf'
+    $N1 = exp $N0
+    is($N1, 0, '... exp -Inf')
+    $N0 = 'NaN'
+    $N1 = exp $N0
+    is($N1, 'NaN', '... exp NaN')
+.end
+
+.sub test_sin
+    $N0 = 'Inf'
+    $N1 = sin $N0
+    is($N1, 'NaN', 'sin: sin Inf')
+    $N0 = '-Inf'
+    $N1 = sin $N0
+    is($N1, 'NaN', '... sin -Inf')
+    $N0 = 'NaN'
+    $N1 = sin $N0
+    is($N1, 'NaN', '... sin NaN')
+.end
+
+.sub test_sinh
+    $N0 = 'Inf'
+    $N1 = sinh $N0
+    is($N1, 'Inf', 'sinh: sinh Inf')
+    $N0 = '-Inf'
+    $N1 = sinh $N0
+    is($N1, '-Inf', '... sinh -Inf')
+    $N0 = 'NaN'
+    $N1 = sinh $N0
+    is($N1, 'NaN', '... sinh NaN')
+.end
+
+.sub test_asin
+    $N0 = 'Inf'
+    $N1 = asin $N0
+    is($N1, 'NaN', 'asin: asin Inf')
+    $N0 = '-Inf'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin -Inf')
+    $N0 = 'NaN'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin NaN')
+    $N0 = '-2'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin -2')
+    $N0 = '2'
+    $N1 = asin $N0
+    is($N1, 'NaN', '... asin 2')
+.end
+
+.sub test_acos
+    $N0 = 'Inf'
+    $N1 = acos $N0
+    is($N1, 'NaN', 'acos: acos Inf')
+    $N0 = '-Inf'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos -Inf')
+    $N0 = 'NaN'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos NaN')
+    $N0 = '-2'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos -2')
+    $N0 = '2'
+    $N1 = acos $N0
+    is($N1, 'NaN', '... acos 2')
+.end
+
+.sub test_cosh
+    $N0 = 'Inf'
+    $N1 = cosh $N0
+    is($N1, 'Inf', 'cosh: cosh Inf')
+    $N0 = '-Inf'
+    $N1 = cosh $N0
+    is($N1, 'Inf', '... cosh -Inf')
+    $N0 = 'NaN'
+    $N1 = cosh $N0
+    is($N1, 'NaN', '... cosh NaN')
+.end
+
+.sub test_cos
+    $N0 = 'Inf'
+    $N1 = cos $N0
+    is($N1, 'NaN', 'cos: cos Inf')
+    $N0 = '-Inf'
+    $N1 = cos $N0
+    is($N1, 'NaN', '... cos -Inf')
+    $N0 = 'NaN'
+    $N1 = cos $N0
+    is($N1, 'NaN', '... cos NaN')
+.end
+
+.sub test_tan
+    $N0 = 'Inf'
+    $N1 = tan $N0
+    is($N1, 'NaN', 'tan: tan Inf')
+    $N0 = '-Inf'
+    $N1 = tan $N0
+    is($N1, 'NaN', '... tan -Inf')
+    $N0 = 'NaN'
+    $N1 = tan $N0
+    is($N1, 'NaN', '... tan NaN')
+.end
+
+.sub test_tanh
+    $N0 = 'Inf'
+    $N1 = tanh $N0
+    is($N1, 1, 'tanh: tanh Inf')
+    $N0 = '-Inf'
+    $N1 = tanh $N0
+    is($N1, -1, '... tanh -Inf')
+    $N0 = 'NaN'
+    $N1 = tanh $N0
+    is($N1, 'NaN', '... tanh NaN')
+.end
+
+.sub test_atan
+    $N0 = 'Inf'
+    $N1 = atan $N0
+    $P1 = new 'Float'
+    $P1 = $N1
+    is($P1, 1.5707963, 'atan: atan Inf',1e-6)
+
+    $N0 = '-Inf'
+    $N1 = atan $N0
+    $P1 = new 'Float'
+    $P1 = $N1
+    is($P1, -1.5707963, '... atan -Inf',1e-6)
+
+    $N0 = 'NaN'
+    $N1 = atan $N0
+    is($N1, 'NaN', '... atan NaN')
+.end
+
+.sub test_coth
+    $N0 = 'Inf'
+    #$N1 = coth $N0
+    #is($N1, 1, 'coth: coth Inf')
+    todo(0, 'coth Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-Inf'
+    #$N1 = coth $N0
+    #is($N1, -1, '... coth -Inf')
+    todo(0, 'coth -Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = 'NaN'
+    #$N1 = coth $N0
+    #is($N1, 'NaN', '... coth NaN')
+    todo(0, 'coth NaN', 'cot/coth/acot not implemented for real numbers')
+.end
+
+.sub test_acot
+    $N0 = 'Inf'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', 'acot: acot Inf')
+    todo(0, 'acot Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-Inf'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot -Inf')
+    todo(0, 'acot -Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = 'NaN'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot NaN')
+    todo(0, 'acot NaN', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-2'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot -2')
+    todo(0, 'acot -2', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '2'
+    #$N1 = acot $N0
+    #is($N1, 'NaN', '... acot 2')
+    todo(0, 'acot 2', 'cot/coth/acot not implemented for real numbers')
+.end
+
+.sub test_sec
+    $N0 = 'Inf'
+    $N1 = sec $N0
+    is($N1, 'NaN', 'sec: sec Inf')
+    $N0 = '-Inf'
+    $N1 = sec $N0
+    is($N1, 'NaN', '... sec -Inf')
+    $N0 = 'NaN'
+    $N1 = sec $N0
+    is($N1, 'NaN', '... sec NaN')
+.end
+
+.sub test_sech
+    $N0 = 'Inf'
+    $N1 = sech $N0
+    is($N1, 0, 'sech: sech Inf')
+    $N0 = '-Inf'
+    $N1 = sech $N0
+    is($N1, 0, '... sech -Inf')
+    $N0 = 'NaN'
+    $N1 = sech $N0
+    is($N1, 'NaN', '... sech NaN')
+.end
+
+.sub test_asec
+    $N0 = 'Inf'
+    $N1 = asec $N0
+    $P1 = new 'Float'
+    $P1 = $N1
+    is($P1, 1.5707963, 'asec: asec Inf',1e-6)
+    $N0 = '-Inf'
+    $N1 = asec $N0
+    $P1 = $N1
+    is($P1, 1.5707963, '... asec -Inf',1e-6)
+    $N0 = 'NaN'
+    $N1 = asec $N0
+    is($N1, 'NaN', 'asec NaN')
+.end
+
+.sub test_ln
+    $N0 = 'Inf'
+    $N1 = ln $N0
+    is($N1, 'Inf', 'ln: ln Inf')
+    $N0 = '-Inf'
+    $N1 = ln $N0
+    is($N1, 'NaN', '... ln Inf')
+    $N0 = 'NaN'
+    $N1 = ln $N0
+    is($N1, 'NaN', '... ln NaN')
+.end
+
+.sub test_log10
+    $N0 = 'Inf'
+    $N1 = log10 $N0
+    is($N1, 'Inf', 'log10: log10 Inf')
+    $N0 = '-Inf'
+    $N1 = log10 $N0
+    is($N1, 'NaN', '... log10 -Inf')
+    $N0 = 'NaN'
+    $N1 = log10 $N0
+    is($N1, 'NaN', '... log10 NaN')
+.end
+
+.sub test_log2
+    $N0 = 'Inf'
+    $N1 = log2 $N0
+    is($N1, 'Inf', 'log2: log2 Inf')
+    $N0 = '-Inf'
+    $N1 = log2 $N0
+    is($N1, 'NaN', '... log2 -Inf')
+    $N0 = 'NaN'
+    $N1 = log2 $N0
+    is($N1, 'NaN', '... log2 -Inf')
+.end
+
+
+.sub test_cot
+    $N0 = 'Inf'
+    #$N1 = cot $N0
+    #is($N1, 'NaN', 'cot: cot Inf')
+    todo(0, 'cot Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = '-Inf'
+    #$N1 = cot $N0
+    #is($N1, 'NaN', '... cot -Inf')
+    todo(0, 'cot -Inf', 'cot/coth/acot not implemented for real numbers')
+    $N0 = 'NaN'
+    #$N1 = cot $N0
+    #is($N1, 'NaN', '... cot NaN')
+    todo(0, 'cot NaN', 'cot/coth/acot not implemented for real numbers')
+.end
+
+.sub test_pow
+    $N0 = 'Inf'
+    pow $N1, $N0, 2
+    is($N1, 'Inf', 'pow: Inf ^ 2')
+    pow $N1, 2, $N0
+    is($N1, 'Inf', '...: 2 ^ Inf')
+    $N0 = 'NaN'
+    pow $N1, $N0, 2
+    is($N1, 'NaN', '...: NaN ^ 2')
+    pow $N1, 2, $N0
+    is($N1, 'NaN', '...: 2 ^ NaN')
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Added: branches/ops_massacre/t/dynoplibs/trans-old.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_massacre/t/dynoplibs/trans-old.t	Thu May 20 07:12:16 2010	(r46813)
@@ -0,0 +1,565 @@
+#!perl
+# Copyright (C) 2001-2008, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test tests => 13;
+use Math::Trig qw( tan sec atan asin acos asec cosh sinh tanh sech );
+
+=head1 NAME
+
+t/op/trans.t - Transcendental Mathematical Ops
+
+=head1 SYNOPSIS
+
+    % prove t/op/trans.t
+
+=head1 DESCRIPTION
+
+Tests the transcendental mathematical operations.
+
+=cut
+
+# This defines two macros:
+# fp_eq N, N, LABEL
+# fp_ne N, N, LABEL
+# which will conditionally branch
+# to LABEL if abs(n,n) < epsilon
+
+pasm_output_is( <<"CODE", <<OUTPUT, "sinh" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 1.0
+        sinh N2, N1
+        .fp_eq_pasm  (N2, 1.175201, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 1
+        sinh N2, I1
+        .fp_eq_pasm  (N2, 1.175201, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "tanh" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 1.0
+        tanh N2, N1
+        .fp_eq_pasm  (N2, 0.761594, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 1
+        tanh N2, I1
+        .fp_eq_pasm  (N2, 0.761594, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "sech" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 1.0
+        sech N2, N1
+        .fp_eq_pasm  (N2, 0.648054, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 1
+        sech N2, I1
+        .fp_eq_pasm  (N2, 0.648054, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, 'atan2' );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N0, 0.0
+        set I0, 0
+        set N1, 1.0
+        set I1, 1
+        set N2, 1.0
+        set I2, 1
+        set I3, -1
+        set N3, -1.0
+
+        atan N4, N1, N2
+        .fp_eq_pasm  (N4, 0.785398, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        atan N4, N1, I2
+        .fp_eq_pasm  (N4, 0.785398, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        atan N4, I1, N2
+        .fp_eq_pasm  (N4, 0.785398, EQ3)
+        print "not "
+EQ3:    print "ok 3\\n"
+
+        atan N4, I1, I2
+        .fp_eq_pasm  (N4, 0.785398, EQ4)
+        print "not "
+EQ4:    print "ok 4\\n"
+
+        atan N4, N3, 1.0
+        .fp_eq_pasm   (N4, -0.785398, EQ5)
+        print "not "
+EQ5:    print "ok 5\\n"
+
+        atan N4, N1, 0
+        .fp_eq_pasm   (N4, 1.570796, EQ6)
+        print "not "
+EQ6:    print "ok 6\\n"
+
+        atan N4, I3, 0.0
+        .fp_eq_pasm   (N4, -1.570796, EQ7)
+        print "not "
+EQ7:    print "ok 7\\n"
+
+        atan N4, I3, -1
+        .fp_eq_pasm   (N4, -2.356194, EQ8)
+        print "not "
+EQ8:    print "ok 8\\n"
+
+        atan N4, 1.0, N3
+        .fp_eq_pasm   (N4, 2.356194, EQ9)
+        print "not "
+EQ9:    print "ok 9\\n"
+
+        atan N4, 1.0, I0
+        .fp_eq_pasm   (N4, 1.570796, EQ10)
+        print "not "
+EQ10:   print "ok 10\\n"
+
+        atan N4, 1, N1
+        .fp_eq_pasm   (N4, 0.785398, EQ11)
+        print "not "
+EQ11:   print "ok 11\\n"
+
+        atan N4, 1, I1
+        .fp_eq_pasm   (N4, 0.785398, EQ12)
+        print "not "
+EQ12:   print "ok 12\\n"
+
+        atan N4, 0.0, 1.0
+        .fp_eq_pasm   (N4, 0.000000, EQ13)
+        print "not "
+EQ13:   print "ok 13\\n"
+
+        atan N4, -1.0, 0
+        .fp_eq_pasm   (N4, -1.570796, EQ14)
+        print "not "
+EQ14:   print "ok 14\\n"
+
+        atan N4, 1, -1.0
+        .fp_eq_pasm   (N4, 2.356194, EQ15)
+        print "not "
+EQ15:   print "ok 15\\n"
+
+        atan N4, 0, 1
+        .fp_eq_pasm   (N4, 0.000000, EQ16)
+        print "not "
+EQ16:   print "ok 16\\n"
+        end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+ok 13
+ok 14
+ok 15
+ok 16
+OUTPUT
+
+pasm_output_is( <<"CODE", <<'OUTPUT', 'atan, part 2' );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        atan N4, -0.0, -0.0
+        .fp_eq_pasm   (N4, -3.1415926, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+        end
+CODE
+ok 1
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "log2" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 10.0
+        log2 N2, N1
+        .fp_eq_pasm  (N2, 3.321928, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 10
+        log2 N2, I1
+        .fp_eq_pasm  (N2, 3.321928, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "log10" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 15.0
+        log10 N2, N1
+        .fp_eq_pasm  (N2, 1.176091, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 15
+        log10 N2, I1
+        .fp_eq_pasm  (N2, 1.176091, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "ln" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 10.0
+        ln N2, N1
+        .fp_eq_pasm  (N2, 2.302585, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 10
+        ln N2, I1
+        .fp_eq_pasm  (N2, 2.302585, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "exp" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 10.0
+        exp N2, N1
+        .fp_eq_pasm  (N2, 22026.465795, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        set I1, 10
+        exp N2, I1
+        .fp_eq_pasm (N2, 22026.465795, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+        end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "pow" );
+        .loadlib 'trans_ops'
+        .include 'fp_equality.pasm'
+        set N1, 3.0
+        set I1, 3
+        set N2, 5.0
+        set I2, 5
+        pow N3, N1, N2
+        .fp_eq_pasm  (N3, 243.0, EQ1)
+        print "not "
+EQ1:    print "ok 1\\n"
+
+        pow N3, N1, I2
+        .fp_eq_pasm  (N3, 243.0, EQ2)
+        print "not "
+EQ2:    print "ok 2\\n"
+
+        pow N3, I1, N2
+        .fp_eq_pasm  (N3, 243.0, EQ3)
+        print "not "
+EQ3:    print "ok 3\\n"
+
+        pow N3, I1, I2
+        .fp_eq_pasm  (N3, 243.0, EQ4)
+        print "not "
+EQ4:    print "ok 4\\n"
+
+        set N0, 0.0
+        set I0, 0
+        set N1, 1.0
+        set I1, 1
+        set N2, 4.0
+        set I2, 4
+        pow N3, N2, 2.5
+        .fp_eq_pasm  (N3, 32.0, EQ5)
+        print "not "
+EQ5:    print "ok 5\\n"
+
+        pow N3, N2, -2
+        .fp_eq_pasm  (N3, 0.0625, EQ6)
+        print "not "
+EQ6:    print "ok 6\\n"
+
+        pow N3, I2, 0.5
+        .fp_eq_pasm  (N3, 2.0, EQ7)
+        print "not "
+EQ7:    print "ok 7\\n"
+
+        pow N3, I2, 0
+        .fp_eq_pasm  (N3, 1.0, EQ8)
+        print "not "
+EQ8:    print "ok 8\\n"
+
+        pow N3, 0.0, N2
+        .fp_eq_pasm  (N3, 0.0, EQ9)
+        print "not "
+EQ9:    print "ok 9\\n"
+
+        pow N3, 2.5, 0.0
+        .fp_eq_pasm  (N3, 1.0, EQ10)
+        print "not "
+EQ10:   print "ok 10\\n"
+
+        pow N3, 2.5, I2
+        .fp_eq_pasm  (N3, 39.0625, EQ11)
+        print "not "
+EQ11:   print "ok 11\\n"
+
+        pow N3, 2.0, -4
+        .fp_eq_pasm  (N3, 0.0625, EQ12)
+        print "not "
+EQ12:   print "ok 12\\n"
+
+        pow N3, 0, N2
+        .fp_eq_pasm  (N3, 0.0, EQ13)
+        print "not "
+EQ13:   print "ok 13\\n"
+
+        pow N3, 4, -0.5
+        .fp_eq_pasm  (N3, 0.5, EQ14)
+        print "not "
+EQ14:   print "ok 14\\n"
+
+        pow N3, 4, I2
+        .fp_eq_pasm  (N3, 256.0, EQ15)
+        print "not "
+EQ15:   print "ok 15\\n"
+
+        pow N3, 4, -1
+        .fp_eq_pasm  (N3, 0.25, EQ16)
+        print "not "
+EQ16:   print "ok 16\\n"
+        end
+CODE
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 8
+ok 9
+ok 10
+ok 11
+ok 12
+ok 13
+ok 14
+ok 15
+ok 16
+OUTPUT
+
+pasm_output_is( <<"CODE", <<OUTPUT, "sqrt" );
+       .include 'fp_equality.pasm'
+       set N1, 9.0
+       sqrt N2, N1
+       .fp_eq_pasm  (N2, 3.0, EQ1)
+       print "not "
+EQ1:   print "ok 1\\n"
+
+       set I1, 9
+       sqrt N2, I1
+       .fp_eq_pasm  (N2, 3.0, EQ2)
+       print "not "
+EQ2:   print "ok 2\\n"
+
+       end
+CODE
+ok 1
+ok 2
+OUTPUT
+
+pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_ic" );
+    .loadlib 'trans_ops'
+    set N0, 2.0
+    pow N1, N0, 0
+    print N1
+    print "\n"
+    pow N1, N0, 1
+    print N1
+    print "\n"
+    pow N1, N0, 2
+    print N1
+    print "\n"
+    pow N1, N0, 3
+    print N1
+    print "\n"
+    pow N1, N0, 4
+    print N1
+    print "\n"
+    pow N1, N0, 5
+    print N1
+    print "\n"
+    pow N1, N0, 6
+    print N1
+    print "\n"
+    pow N1, N0, 7
+    print N1
+    print "\n"
+    pow N1, N0, -1
+    print N1
+    print "\n"
+    pow N1, N0, -2
+    print N1
+    print "\n"
+    pow N1, N0, -3
+    print N1
+    print "\n"
+    pow N1, N0, -4
+    print N1
+    print "\n"
+    pow N1, N0, -5
+    end
+CODE
+1
+2
+4
+8
+16
+32
+64
+128
+0.5
+0.25
+0.125
+0.0625
+OUTPUT
+
+pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_i" );
+    .loadlib 'trans_ops'
+    set N0, 2.0
+    set I0, 0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    inc I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    set I0, -1
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    dec I0
+    pow N1, N0, I0
+    print N1
+    print "\n"
+    end
+CODE
+1
+2
+4
+8
+16
+32
+64
+0.5
+0.25
+0.125
+0.0625
+0.03125
+0.015625
+OUTPUT
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Added: branches/ops_massacre/t/dynoplibs/trans.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_massacre/t/dynoplibs/trans.t	Thu May 20 07:12:16 2010	(r46813)
@@ -0,0 +1,292 @@
+#!./parrot
+# Copyright (C) 2001-2010, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+t/op/trans.t - Trancendental Mathematical Ops
+
+=head1 SYNOPSIS
+
+        % prove t/op/trans.t
+
+=head1 DESCRIPTION
+
+Tests various transcendental operations
+
+=cut
+
+.loadlib 'trans_ops'
+
+.sub main :main
+    .include 'test_more.pir'
+    .local num epsilon
+    epsilon = _epsilon()
+
+    plan(68)
+
+    test_sin_n(epsilon)
+    test_sin_i(epsilon)
+    test_cos_n(epsilon)
+    test_cos_i(epsilon)
+    test_tan_n(epsilon)
+    test_tan_i(epsilon)
+    test_sec_n(epsilon)
+    test_sec_i(epsilon)
+    test_atan_n(epsilon)
+    test_atan_i(epsilon)
+    test_asin_n(epsilon)
+    test_asin_i(epsilon)
+    test_acos_n(epsilon)
+    test_acos_i(epsilon)
+    test_asec_n(epsilon)
+    test_asec_i(epsilon)
+    test_cosh_n(epsilon)
+    test_cosh_i(epsilon)
+    integer_overflow_with_pow()
+.end
+
+.sub _pi
+    .return (3.1415926535897)
+.end
+
+.sub _e
+    .return (2.7182818459045)
+.end
+
+.sub _epsilon
+    .return (0.0001)
+.end
+
+.sub test_sin_n
+    .param num epsilon
+
+    $N0 = sin 0.0
+    is($N0, 0.0, "sin(0.0)", epsilon)
+
+    $N0 = sin 1.0
+    is($N0, 0.841471, "sin(1.0)", epsilon)
+
+    $N1 = _pi()
+    $N0 = sin $N1
+    is($N0, 0.0, "sin(pi)", epsilon)
+
+    $N1 = _pi()
+    $N1 = $N1 / 2
+    $N0 = sin $N1
+    is($N0, 1.0, "sin(pi/2)", epsilon)
+.end
+
+.sub test_sin_i
+    .param num epsilon
+
+    $N0 = sin 0
+    is($N0, 0.0, "sin(0)", epsilon)
+
+    $N0 = sin 1
+    is($N0, 0.841471, "sin(1)", epsilon)
+.end
+
+.sub test_cos_n
+    .param num epsilon
+
+    $N0 = cos 0.0
+    is($N0, 1.0, "cos(0.0)", epsilon)
+
+    $N0 = cos 1.0
+    is($N0, 0.540302, "cos(1.0)", epsilon)
+
+    $N1 = _pi()
+    $N0 = cos $N1
+    is($N0, -1.0, "cos(pi)", epsilon)
+
+    $N1 = _pi()
+    $N1 = $N1 / 2
+    $N0 = cos $N1
+    is($N0, 0.0, "cos(pi/2)", epsilon)
+.end
+
+.sub test_cos_i
+    .param num epsilon
+
+    $N0 = cos 0
+    is($N0, 1.0, "cos(0)", epsilon)
+
+    $N0 = cos 1
+    is($N0, 0.540302, "cos(1)", epsilon)
+.end
+
+.sub test_tan_n
+    .param num epsilon
+
+    $N0 = tan 0.0
+    is($N0, 0.0, "tan(0.0)", epsilon)
+
+    $N0 = tan 1.0
+    is($N0, 1.557408, "tan(1.0)", epsilon)
+.end
+
+.sub test_tan_i
+    .param num epsilon
+
+    $N0 = tan 0
+    is($N0, 0.0, "tan(0)", epsilon)
+
+    $N0 = tan 1
+    is($N0, 1.557408, "tan(1)", epsilon)
+.end
+
+.sub test_sec_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = sec $N1
+    is($N2, 1.850816, "sec(1.0)", epsilon)
+.end
+
+.sub test_sec_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = sec $I1
+    is($N1, 1.850816, "sec(1)", epsilon)
+.end
+
+.sub test_atan_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = atan $N1
+    is($N2, 0.785398, "atan(1.0)", epsilon)
+.end
+
+.sub test_atan_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = atan $I1
+    is($N1, 0.785398, "atan(1)", epsilon)
+.end
+
+.sub test_asin_n
+    .param num epsilon
+    .local num pi2
+    pi2 = _pi()
+    pi2 /= 2
+
+    $N1 = 1.0
+    $N2 = asin $N1
+    is($N2, pi2, "asin(1.0)", epsilon)
+.end
+
+.sub test_asin_i
+    .param num epsilon
+    .local num pi2
+    pi2 = _pi()
+    pi2 /= 2
+
+    $I1 = 1
+    $N1 = asin $I1
+    is($N1, pi2, "asin(1)", epsilon)
+.end
+
+.sub test_acos_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = acos $N1
+    is($N2, 0.0, "acos(1.0)", epsilon)
+.end
+
+.sub test_acos_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = acos $I1
+    is($N1, 0.0, "acos(1)", epsilon)
+.end
+
+.sub test_asec_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = asec $N1
+    is($N2, 0.0, "asec(1.0)", epsilon)
+.end
+
+.sub test_asec_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = asec $I1
+    is($N1, 0.0, "asec(1)", epsilon)
+.end
+
+.sub test_cosh_n
+    .param num epsilon
+    .local num result
+
+    $N1 = 1.0
+    $N2 = cosh $N1
+    is($N2, 1.543081, "cosh(1.0)", epsilon)
+.end
+
+.sub test_cosh_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = cosh $I1
+    is($N1, 1.543081, "cosh(1)", epsilon)
+.end
+
+.sub integer_overflow_with_pow
+    .include "iglobals.pasm"
+
+    # Check that we aren't 32-bit INTVALs without GMP
+    .local pmc interp     # a handle to our interpreter object.
+    interp = getinterp
+    .local pmc config
+    config = interp[.IGLOBALS_CONFIG_HASH]
+    .local int intvalsize
+    intvalsize = config['intvalsize']
+    .local int gmp
+    gmp = config['gmp']
+
+    if intvalsize != 4 goto can_test
+    if gmp goto can_test
+        skip(40,'No integer overflow for 32-bit INTVALs without GMP installed')
+        goto end
+
+  can_test:
+
+    .local pmc i1, i2, r
+    i1 = new 'Integer'
+    i2 = new 'Integer'
+    i1 = 2
+    i2 = 1
+    $I1 = 1
+  next:
+    null r
+    r = pow i1, i2
+    $S0 = r
+
+    $I1 = $I1 * 2
+    is( $S0, $I1, 'integer_overflow_with_pow' )
+
+    inc i2
+# XXX: this must be extended to at least 64 bit range
+# when sure that the result is not floating point.
+# In the meantime, make sure it overflows nicely
+# on 32 bit.
+    unless i2 > 40 goto next
+
+  end:
+.end
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+

Modified: branches/ops_massacre/t/op/arithmetics.t
==============================================================================
--- branches/ops_massacre/t/op/arithmetics.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/op/arithmetics.t	Thu May 20 07:12:16 2010	(r46813)
@@ -21,7 +21,7 @@
     .include 'test_more.pir'
     .include 'iglobals.pasm'
 
-    plan(121)
+    plan(81)
 
     take_the_negative_of_a_native_integer()
     take_the_absolute_of_a_native_integer()
@@ -42,7 +42,6 @@
     subtract_native_number_from_native_number()
     multiply_native_number_with_native_number()
     divide_native_number_by_native_number()
-    integer_overflow_with_pow()
     bnot_p_p_creates_destination()
     # END_OF_TESTS
 
@@ -470,50 +469,6 @@
 
 .end
 
-.sub integer_overflow_with_pow
-    .include "iglobals.pasm"
-
-    # Check that we aren't 32-bit INTVALs without GMP
-    .local pmc interp     # a handle to our interpreter object.
-    interp = getinterp
-    .local pmc config
-    config = interp[.IGLOBALS_CONFIG_HASH]
-    .local int intvalsize
-    intvalsize = config['intvalsize']
-    .local int gmp
-    gmp = config['gmp']
-
-    if intvalsize != 4 goto can_test
-    if gmp goto can_test
-        skip(40,'No integer overflow for 32-bit INTVALs without GMP installed')
-        goto end
-
-  can_test:
-
-    .local pmc i1, i2, r
-    i1 = new 'Integer'
-    i2 = new 'Integer'
-    i1 = 2
-    i2 = 1
-    $I1 = 1
-  next:
-    null r
-    r = pow i1, i2
-    $S0 = r
-
-    $I1 = $I1 * 2
-    is( $S0, $I1, 'integer_overflow_with_pow' )
-
-    inc i2
-# XXX: this must be extended to at least 64 bit range
-# when sure that the result is not floating point.
-# In the meantime, make sure it overflows nicely
-# on 32 bit.
-    unless i2 > 40 goto next
-
-  end:
-.end
-
 .sub 'bnot_p_p_creates_destination'
     $P0 = box 3
     $P1 = bnot $P0

Modified: branches/ops_massacre/t/op/arithmetics_pmc.t
==============================================================================
--- branches/ops_massacre/t/op/arithmetics_pmc.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/op/arithmetics_pmc.t	Thu May 20 07:12:16 2010	(r46813)
@@ -16,6 +16,8 @@
 
 =cut
 
+.loadlib 'trans_ops' # for pow
+
 .sub main :main
     .include 'test_more.pir'
     .include "iglobals.pasm"

Modified: branches/ops_massacre/t/op/inf_nan.t
==============================================================================
--- branches/ops_massacre/t/op/inf_nan.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/op/inf_nan.t	Thu May 20 07:12:16 2010	(r46813)
@@ -18,31 +18,11 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(105)
+    plan(38)
 
     test_basic_arith()
-    test_exp()
     test_sqrt()
-    test_sin()
-    test_sinh()
-    test_asin()
-    test_cos()
-    test_cosh()
-    test_acos()
-    test_tan()
-    test_tanh()
-    test_atan()
-    test_cot()
-    test_coth()
-    test_acot()
-    test_sec()
-    test_sech()
-    test_asec()
-    test_ln()
-    test_log10()
-    test_log2()
     test_neg()
-    test_pow()
     test_mix_nan_inf()
     test_rounding_n()
     test_rounding_i()
@@ -82,19 +62,6 @@
     is($N3, 'Inf', '... abs -Inf')
 .end
 
-
-.sub test_exp
-    $N0 = 'Inf'
-    $N1 = exp $N0
-    is($N1, 'Inf', 'exp: exp Inf')
-    $N0 = '-Inf'
-    $N1 = exp $N0
-    is($N1, 0, '... exp -Inf')
-    $N0 = 'NaN'
-    $N1 = exp $N0
-    is($N1, 'NaN', '... exp NaN')
-.end
-
 .sub test_sqrt
     $N0 = 'Inf'
     $N1 =  $N0
@@ -110,260 +77,6 @@
     is($N1, 'NaN', '... sqrt -1')
 .end
 
-.sub test_sin
-    $N0 = 'Inf'
-    $N1 = sin $N0
-    is($N1, 'NaN', 'sin: sin Inf')
-    $N0 = '-Inf'
-    $N1 = sin $N0
-    is($N1, 'NaN', '... sin -Inf')
-    $N0 = 'NaN'
-    $N1 = sin $N0
-    is($N1, 'NaN', '... sin NaN')
-.end
-
-.sub test_sinh
-    $N0 = 'Inf'
-    $N1 = sinh $N0
-    is($N1, 'Inf', 'sinh: sinh Inf')
-    $N0 = '-Inf'
-    $N1 = sinh $N0
-    is($N1, '-Inf', '... sinh -Inf')
-    $N0 = 'NaN'
-    $N1 = sinh $N0
-    is($N1, 'NaN', '... sinh NaN')
-.end
-
-.sub test_asin
-    $N0 = 'Inf'
-    $N1 = asin $N0
-    is($N1, 'NaN', 'asin: asin Inf')
-    $N0 = '-Inf'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin -Inf')
-    $N0 = 'NaN'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin NaN')
-    $N0 = '-2'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin -2')
-    $N0 = '2'
-    $N1 = asin $N0
-    is($N1, 'NaN', '... asin 2')
-.end
-
-.sub test_cos
-    $N0 = 'Inf'
-    $N1 = cos $N0
-    is($N1, 'NaN', 'cos: cos Inf')
-    $N0 = '-Inf'
-    $N1 = cos $N0
-    is($N1, 'NaN', '... cos -Inf')
-    $N0 = 'NaN'
-    $N1 = cos $N0
-    is($N1, 'NaN', '... cos NaN')
-.end
-
-.sub test_cosh
-    $N0 = 'Inf'
-    $N1 = cosh $N0
-    is($N1, 'Inf', 'cosh: cosh Inf')
-    $N0 = '-Inf'
-    $N1 = cosh $N0
-    is($N1, 'Inf', '... cosh -Inf')
-    $N0 = 'NaN'
-    $N1 = cosh $N0
-    is($N1, 'NaN', '... cosh NaN')
-.end
-
-.sub test_acos
-    $N0 = 'Inf'
-    $N1 = acos $N0
-    is($N1, 'NaN', 'acos: acos Inf')
-    $N0 = '-Inf'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos -Inf')
-    $N0 = 'NaN'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos NaN')
-    $N0 = '-2'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos -2')
-    $N0 = '2'
-    $N1 = acos $N0
-    is($N1, 'NaN', '... acos 2')
-.end
-
-.sub test_tan
-    $N0 = 'Inf'
-    $N1 = tan $N0
-    is($N1, 'NaN', 'tan: tan Inf')
-    $N0 = '-Inf'
-    $N1 = tan $N0
-    is($N1, 'NaN', '... tan -Inf')
-    $N0 = 'NaN'
-    $N1 = tan $N0
-    is($N1, 'NaN', '... tan NaN')
-.end
-
-.sub test_tanh
-    $N0 = 'Inf'
-    $N1 = tanh $N0
-    is($N1, 1, 'tanh: tanh Inf')
-    $N0 = '-Inf'
-    $N1 = tanh $N0
-    is($N1, -1, '... tanh -Inf')
-    $N0 = 'NaN'
-    $N1 = tanh $N0
-    is($N1, 'NaN', '... tanh NaN')
-.end
-
-.sub test_atan
-    $N0 = 'Inf'
-    $N1 = atan $N0
-    $P1 = new 'Float'
-    $P1 = $N1
-    is($P1, 1.5707963, 'atan: atan Inf',1e-6)
-
-    $N0 = '-Inf'
-    $N1 = atan $N0
-    $P1 = new 'Float'
-    $P1 = $N1
-    is($P1, -1.5707963, '... atan -Inf',1e-6)
-
-    $N0 = 'NaN'
-    $N1 = atan $N0
-    is($N1, 'NaN', '... atan NaN')
-.end
-
-.sub test_cot
-    $N0 = 'Inf'
-    #$N1 = cot $N0
-    #is($N1, 'NaN', 'cot: cot Inf')
-    todo(0, 'cot Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-Inf'
-    #$N1 = cot $N0
-    #is($N1, 'NaN', '... cot -Inf')
-    todo(0, 'cot -Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = 'NaN'
-    #$N1 = cot $N0
-    #is($N1, 'NaN', '... cot NaN')
-    todo(0, 'cot NaN', 'cot/coth/acot not implemented for real numbers')
-.end
-
-.sub test_coth
-    $N0 = 'Inf'
-    #$N1 = coth $N0
-    #is($N1, 1, 'coth: coth Inf')
-    todo(0, 'coth Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-Inf'
-    #$N1 = coth $N0
-    #is($N1, -1, '... coth -Inf')
-    todo(0, 'coth -Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = 'NaN'
-    #$N1 = coth $N0
-    #is($N1, 'NaN', '... coth NaN')
-    todo(0, 'coth NaN', 'cot/coth/acot not implemented for real numbers')
-.end
-
-.sub test_acot
-    $N0 = 'Inf'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', 'acot: acot Inf')
-    todo(0, 'acot Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-Inf'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot -Inf')
-    todo(0, 'acot -Inf', 'cot/coth/acot not implemented for real numbers')
-    $N0 = 'NaN'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot NaN')
-    todo(0, 'acot NaN', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '-2'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot -2')
-    todo(0, 'acot -2', 'cot/coth/acot not implemented for real numbers')
-    $N0 = '2'
-    #$N1 = acot $N0
-    #is($N1, 'NaN', '... acot 2')
-    todo(0, 'acot 2', 'cot/coth/acot not implemented for real numbers')
-.end
-
-.sub test_sec
-    $N0 = 'Inf'
-    $N1 = sec $N0
-    is($N1, 'NaN', 'sec: sec Inf')
-    $N0 = '-Inf'
-    $N1 = sec $N0
-    is($N1, 'NaN', '... sec -Inf')
-    $N0 = 'NaN'
-    $N1 = sec $N0
-    is($N1, 'NaN', '... sec NaN')
-.end
-
-.sub test_sech
-    $N0 = 'Inf'
-    $N1 = sech $N0
-    is($N1, 0, 'sech: sech Inf')
-    $N0 = '-Inf'
-    $N1 = sech $N0
-    is($N1, 0, '... sech -Inf')
-    $N0 = 'NaN'
-    $N1 = sech $N0
-    is($N1, 'NaN', '... sech NaN')
-.end
-
-.sub test_asec
-    $N0 = 'Inf'
-    $N1 = asec $N0
-    $P1 = new 'Float'
-    $P1 = $N1
-    is($P1, 1.5707963, 'asec: asec Inf',1e-6)
-    $N0 = '-Inf'
-    $N1 = asec $N0
-    $P1 = $N1
-    is($P1, 1.5707963, '... asec -Inf',1e-6)
-    $N0 = 'NaN'
-    $N1 = asec $N0
-    is($N1, 'NaN', 'asec NaN')
-.end
-
-.sub test_ln
-    $N0 = 'Inf'
-    $N1 = ln $N0
-    is($N1, 'Inf', 'ln: ln Inf')
-    $N0 = '-Inf'
-    $N1 = ln $N0
-    is($N1, 'NaN', '... ln Inf')
-    $N0 = 'NaN'
-    $N1 = ln $N0
-    is($N1, 'NaN', '... ln NaN')
-.end
-
-.sub test_log10
-    $N0 = 'Inf'
-    $N1 = log10 $N0
-    is($N1, 'Inf', 'log10: log10 Inf')
-    $N0 = '-Inf'
-    $N1 = log10 $N0
-    is($N1, 'NaN', '... log10 -Inf')
-    $N0 = 'NaN'
-    $N1 = log10 $N0
-    is($N1, 'NaN', '... log10 NaN')
-.end
-
-.sub test_log2
-    $N0 = 'Inf'
-    $N1 = log2 $N0
-    is($N1, 'Inf', 'log2: log2 Inf')
-    $N0 = '-Inf'
-    $N1 = log2 $N0
-    is($N1, 'NaN', '... log2 -Inf')
-    $N0 = 'NaN'
-    $N1 = log2 $N0
-    is($N1, 'NaN', '... log2 -Inf')
-.end
-
 .sub test_neg
     $N0 = 'Inf'
     $N1 = neg $N0
@@ -376,19 +89,6 @@
     is($N1, 'NaN', '... neg NaN')
 .end
 
-.sub test_pow
-    $N0 = 'Inf'
-    pow $N1, $N0, 2
-    is($N1, 'Inf', 'pow: Inf ^ 2')
-    pow $N1, 2, $N0
-    is($N1, 'Inf', '...: 2 ^ Inf')
-    $N0 = 'NaN'
-    pow $N1, $N0, 2
-    is($N1, 'NaN', '...: NaN ^ 2')
-    pow $N1, 2, $N0
-    is($N1, 'NaN', '...: 2 ^ NaN')
-.end
-
 .sub test_mix_nan_inf
     $N0 = 'NaN'
     $N1 = 'Inf'

Modified: branches/ops_massacre/t/op/sprintf.t
==============================================================================
--- branches/ops_massacre/t/op/sprintf.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/op/sprintf.t	Thu May 20 07:12:16 2010	(r46813)
@@ -154,7 +154,8 @@
     data_hash = new 'Hash'
     data_hash["''"] = ''
     data_hash['2**32-1'] = 0xffffffff
-    $N0 = pow 2, 38
+    $N0 = data_hash['2**32-1']
+    inc $N0
     data_hash['2**38'] = $N0
     data_hash["'string'"] = 'string'
 

Deleted: branches/ops_massacre/t/op/trans.t
==============================================================================
--- branches/ops_massacre/t/op/trans.t	Thu May 20 07:12:16 2010	(r46812)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,244 +0,0 @@
-#!./parrot
-# Copyright (C) 2001-2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/op/trans.t - Trancendental Mathematical Ops
-
-=head1 SYNOPSIS
-
-        % prove t/op/trans.t
-
-=head1 DESCRIPTION
-
-Tests various transcendental operations
-
-=cut
-
-.sub main :main
-    .include 'test_more.pir'
-    .local num epsilon
-    epsilon = _epsilon()
-
-    plan(28)
-
-    test_sin_n(epsilon)
-    test_sin_i(epsilon)
-    test_cos_n(epsilon)
-    test_cos_i(epsilon)
-    test_tan_n(epsilon)
-    test_tan_i(epsilon)
-    test_sec_n(epsilon)
-    test_sec_i(epsilon)
-    test_atan_n(epsilon)
-    test_atan_i(epsilon)
-    test_asin_n(epsilon)
-    test_asin_i(epsilon)
-    test_acos_n(epsilon)
-    test_acos_i(epsilon)
-    test_asec_n(epsilon)
-    test_asec_i(epsilon)
-    test_cosh_n(epsilon)
-    test_cosh_i(epsilon)
-.end
-
-.sub _pi
-    .return (3.1415926535897)
-.end
-
-.sub _e
-    .return (2.7182818459045)
-.end
-
-.sub _epsilon
-    .return (0.0001)
-.end
-
-.sub test_sin_n
-    .param num epsilon
-
-    $N0 = sin 0.0
-    is($N0, 0.0, "sin(0.0)", epsilon)
-
-    $N0 = sin 1.0
-    is($N0, 0.841471, "sin(1.0)", epsilon)
-
-    $N1 = _pi()
-    $N0 = sin $N1
-    is($N0, 0.0, "sin(pi)", epsilon)
-
-    $N1 = _pi()
-    $N1 = $N1 / 2
-    $N0 = sin $N1
-    is($N0, 1.0, "sin(pi/2)", epsilon)
-.end
-
-.sub test_sin_i
-    .param num epsilon
-
-    $N0 = sin 0
-    is($N0, 0.0, "sin(0)", epsilon)
-
-    $N0 = sin 1
-    is($N0, 0.841471, "sin(1)", epsilon)
-.end
-
-.sub test_cos_n
-    .param num epsilon
-
-    $N0 = cos 0.0
-    is($N0, 1.0, "cos(0.0)", epsilon)
-
-    $N0 = cos 1.0
-    is($N0, 0.540302, "cos(1.0)", epsilon)
-
-    $N1 = _pi()
-    $N0 = cos $N1
-    is($N0, -1.0, "cos(pi)", epsilon)
-
-    $N1 = _pi()
-    $N1 = $N1 / 2
-    $N0 = cos $N1
-    is($N0, 0.0, "cos(pi/2)", epsilon)
-.end
-
-.sub test_cos_i
-    .param num epsilon
-
-    $N0 = cos 0
-    is($N0, 1.0, "cos(0)", epsilon)
-
-    $N0 = cos 1
-    is($N0, 0.540302, "cos(1)", epsilon)
-.end
-
-.sub test_tan_n
-    .param num epsilon
-
-    $N0 = tan 0.0
-    is($N0, 0.0, "tan(0.0)", epsilon)
-
-    $N0 = tan 1.0
-    is($N0, 1.557408, "tan(1.0)", epsilon)
-.end
-
-.sub test_tan_i
-    .param num epsilon
-
-    $N0 = tan 0
-    is($N0, 0.0, "tan(0)", epsilon)
-
-    $N0 = tan 1
-    is($N0, 1.557408, "tan(1)", epsilon)
-.end
-
-.sub test_sec_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = sec $N1
-    is($N2, 1.850816, "sec(1.0)", epsilon)
-.end
-
-.sub test_sec_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = sec $I1
-    is($N1, 1.850816, "sec(1)", epsilon)
-.end
-
-.sub test_atan_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = atan $N1
-    is($N2, 0.785398, "atan(1.0)", epsilon)
-.end
-
-.sub test_atan_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = atan $I1
-    is($N1, 0.785398, "atan(1)", epsilon)
-.end
-
-.sub test_asin_n
-    .param num epsilon
-    .local num pi2
-    pi2 = _pi()
-    pi2 /= 2
-
-    $N1 = 1.0
-    $N2 = asin $N1
-    is($N2, pi2, "asin(1.0)", epsilon)
-.end
-
-.sub test_asin_i
-    .param num epsilon
-    .local num pi2
-    pi2 = _pi()
-    pi2 /= 2
-
-    $I1 = 1
-    $N1 = asin $I1
-    is($N1, pi2, "asin(1)", epsilon)
-.end
-
-.sub test_acos_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = acos $N1
-    is($N2, 0.0, "acos(1.0)", epsilon)
-.end
-
-.sub test_acos_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = acos $I1
-    is($N1, 0.0, "acos(1)", epsilon)
-.end
-
-.sub test_asec_n
-    .param num epsilon
-
-    $N1 = 1.0
-    $N2 = asec $N1
-    is($N2, 0.0, "asec(1.0)", epsilon)
-.end
-
-.sub test_asec_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = asec $I1
-    is($N1, 0.0, "asec(1)", epsilon)
-.end
-
-.sub test_cosh_n
-    .param num epsilon
-    .local num result
-
-    $N1 = 1.0
-    $N2 = cosh $N1
-    is($N2, 1.543081, "cosh(1.0)", epsilon)
-.end
-
-.sub test_cosh_i
-    .param num epsilon
-
-    $I1 = 1
-    $N1 = cosh $I1
-    is($N1, 1.543081, "cosh(1)", epsilon)
-.end
-
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
-

Deleted: branches/ops_massacre/t/op/trans_old.t
==============================================================================
--- branches/ops_massacre/t/op/trans_old.t	Thu May 20 07:12:16 2010	(r46812)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,565 +0,0 @@
-#!perl
-# Copyright (C) 2001-2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 13;
-use Math::Trig qw( tan sec atan asin acos asec cosh sinh tanh sech );
-
-=head1 NAME
-
-t/op/trans.t - Transcendental Mathematical Ops
-
-=head1 SYNOPSIS
-
-    % prove t/op/trans.t
-
-=head1 DESCRIPTION
-
-Tests the transcendental mathematical operations.
-
-=cut
-
-# This defines two macros:
-# fp_eq N, N, LABEL
-# fp_ne N, N, LABEL
-# which will conditionally branch
-# to LABEL if abs(n,n) < epsilon
-
-my $runcore = $ENV{TEST_PROG_ARGS} || '';
-my @bsdtodo = (
-    $runcore =~ /--runcore=jit/ &&  $^O =~ m/bsd/i
-        ? ( todo => 'broken under JIT TT #501' )
-        : ()
-);
-
-pasm_output_is( <<"CODE", <<OUTPUT, "sinh", @bsdtodo );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        sinh N2, N1
-        .fp_eq_pasm  (N2, 1.175201, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        sinh N2, I1
-        .fp_eq_pasm  (N2, 1.175201, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "tanh", @bsdtodo );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        tanh N2, N1
-        .fp_eq_pasm  (N2, 0.761594, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        tanh N2, I1
-        .fp_eq_pasm  (N2, 0.761594, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "sech" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        sech N2, N1
-        .fp_eq_pasm  (N2, 0.648054, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        sech N2, I1
-        .fp_eq_pasm  (N2, 0.648054, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-my @jittodo = (
-    $runcore =~ /--runcore=jit/
-        ? ( todo => 'broken under JIT TT #530' )
-        : ()
-);
-pasm_output_is( <<"CODE", <<OUTPUT, 'atan2', @jittodo );
-        .include 'fp_equality.pasm'
-        set N0, 0.0
-        set I0, 0
-        set N1, 1.0
-        set I1, 1
-        set N2, 1.0
-        set I2, 1
-        set I3, -1
-        set N3, -1.0
-
-        atan N4, N1, N2
-        .fp_eq_pasm  (N4, 0.785398, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        atan N4, N1, I2
-        .fp_eq_pasm  (N4, 0.785398, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        atan N4, I1, N2
-        .fp_eq_pasm  (N4, 0.785398, EQ3)
-        print "not "
-EQ3:    print "ok 3\\n"
-
-        atan N4, I1, I2
-        .fp_eq_pasm  (N4, 0.785398, EQ4)
-        print "not "
-EQ4:    print "ok 4\\n"
-
-        atan N4, N3, 1.0
-        .fp_eq_pasm   (N4, -0.785398, EQ5)
-        print "not "
-EQ5:    print "ok 5\\n"
-
-        atan N4, N1, 0
-        .fp_eq_pasm   (N4, 1.570796, EQ6)
-        print "not "
-EQ6:    print "ok 6\\n"
-
-        atan N4, I3, 0.0
-        .fp_eq_pasm   (N4, -1.570796, EQ7)
-        print "not "
-EQ7:    print "ok 7\\n"
-
-        atan N4, I3, -1
-        .fp_eq_pasm   (N4, -2.356194, EQ8)
-        print "not "
-EQ8:    print "ok 8\\n"
-
-        atan N4, 1.0, N3
-        .fp_eq_pasm   (N4, 2.356194, EQ9)
-        print "not "
-EQ9:    print "ok 9\\n"
-
-        atan N4, 1.0, I0
-        .fp_eq_pasm   (N4, 1.570796, EQ10)
-        print "not "
-EQ10:   print "ok 10\\n"
-
-        atan N4, 1, N1
-        .fp_eq_pasm   (N4, 0.785398, EQ11)
-        print "not "
-EQ11:   print "ok 11\\n"
-
-        atan N4, 1, I1
-        .fp_eq_pasm   (N4, 0.785398, EQ12)
-        print "not "
-EQ12:   print "ok 12\\n"
-
-        atan N4, 0.0, 1.0
-        .fp_eq_pasm   (N4, 0.000000, EQ13)
-        print "not "
-EQ13:   print "ok 13\\n"
-
-        atan N4, -1.0, 0
-        .fp_eq_pasm   (N4, -1.570796, EQ14)
-        print "not "
-EQ14:   print "ok 14\\n"
-
-        atan N4, 1, -1.0
-        .fp_eq_pasm   (N4, 2.356194, EQ15)
-        print "not "
-EQ15:   print "ok 15\\n"
-
-        atan N4, 0, 1
-        .fp_eq_pasm   (N4, 0.000000, EQ16)
-        print "not "
-EQ16:   print "ok 16\\n"
-        end
-CODE
-ok 1
-ok 2
-ok 3
-ok 4
-ok 5
-ok 6
-ok 7
-ok 8
-ok 9
-ok 10
-ok 11
-ok 12
-ok 13
-ok 14
-ok 15
-ok 16
-OUTPUT
-
-pasm_output_is( <<"CODE", <<'OUTPUT', 'atan, part 2' );
-        .include 'fp_equality.pasm'
-        atan N4, -0.0, -0.0
-        .fp_eq_pasm   (N4, -3.1415926, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-        end
-CODE
-ok 1
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "log2" );
-        .include 'fp_equality.pasm'
-        set N1, 10.0
-        log2 N2, N1
-        .fp_eq_pasm  (N2, 3.321928, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 10
-        log2 N2, I1
-        .fp_eq_pasm  (N2, 3.321928, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "log10" );
-        .include 'fp_equality.pasm'
-        set N1, 15.0
-        log10 N2, N1
-        .fp_eq_pasm  (N2, 1.176091, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 15
-        log10 N2, I1
-        .fp_eq_pasm  (N2, 1.176091, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "ln" );
-        .include 'fp_equality.pasm'
-        set N1, 10.0
-        ln N2, N1
-        .fp_eq_pasm  (N2, 2.302585, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 10
-        ln N2, I1
-        .fp_eq_pasm  (N2, 2.302585, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "exp" );
-        .include 'fp_equality.pasm'
-        set N1, 10.0
-        exp N2, N1
-        .fp_eq_pasm  (N2, 22026.465795, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 10
-        exp N2, I1
-        .fp_eq_pasm (N2, 22026.465795, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "pow", @bsdtodo );
-        .include 'fp_equality.pasm'
-        set N1, 3.0
-        set I1, 3
-        set N2, 5.0
-        set I2, 5
-        pow N3, N1, N2
-        .fp_eq_pasm  (N3, 243.0, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        pow N3, N1, I2
-        .fp_eq_pasm  (N3, 243.0, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        pow N3, I1, N2
-        .fp_eq_pasm  (N3, 243.0, EQ3)
-        print "not "
-EQ3:    print "ok 3\\n"
-
-        pow N3, I1, I2
-        .fp_eq_pasm  (N3, 243.0, EQ4)
-        print "not "
-EQ4:    print "ok 4\\n"
-
-        set N0, 0.0
-        set I0, 0
-        set N1, 1.0
-        set I1, 1
-        set N2, 4.0
-        set I2, 4
-        pow N3, N2, 2.5
-        .fp_eq_pasm  (N3, 32.0, EQ5)
-        print "not "
-EQ5:    print "ok 5\\n"
-
-        pow N3, N2, -2
-        .fp_eq_pasm  (N3, 0.0625, EQ6)
-        print "not "
-EQ6:    print "ok 6\\n"
-
-        pow N3, I2, 0.5
-        .fp_eq_pasm  (N3, 2.0, EQ7)
-        print "not "
-EQ7:    print "ok 7\\n"
-
-        pow N3, I2, 0
-        .fp_eq_pasm  (N3, 1.0, EQ8)
-        print "not "
-EQ8:    print "ok 8\\n"
-
-        pow N3, 0.0, N2
-        .fp_eq_pasm  (N3, 0.0, EQ9)
-        print "not "
-EQ9:    print "ok 9\\n"
-
-        pow N3, 2.5, 0.0
-        .fp_eq_pasm  (N3, 1.0, EQ10)
-        print "not "
-EQ10:   print "ok 10\\n"
-
-        pow N3, 2.5, I2
-        .fp_eq_pasm  (N3, 39.0625, EQ11)
-        print "not "
-EQ11:   print "ok 11\\n"
-
-        pow N3, 2.0, -4
-        .fp_eq_pasm  (N3, 0.0625, EQ12)
-        print "not "
-EQ12:   print "ok 12\\n"
-
-        pow N3, 0, N2
-        .fp_eq_pasm  (N3, 0.0, EQ13)
-        print "not "
-EQ13:   print "ok 13\\n"
-
-        pow N3, 4, -0.5
-        .fp_eq_pasm  (N3, 0.5, EQ14)
-        print "not "
-EQ14:   print "ok 14\\n"
-
-        pow N3, 4, I2
-        .fp_eq_pasm  (N3, 256.0, EQ15)
-        print "not "
-EQ15:   print "ok 15\\n"
-
-        pow N3, 4, -1
-        .fp_eq_pasm  (N3, 0.25, EQ16)
-        print "not "
-EQ16:   print "ok 16\\n"
-        end
-CODE
-ok 1
-ok 2
-ok 3
-ok 4
-ok 5
-ok 6
-ok 7
-ok 8
-ok 9
-ok 10
-ok 11
-ok 12
-ok 13
-ok 14
-ok 15
-ok 16
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "sqrt" );
-       .include 'fp_equality.pasm'
-       set N1, 9.0
-       sqrt N2, N1
-       .fp_eq_pasm  (N2, 3.0, EQ1)
-       print "not "
-EQ1:   print "ok 1\\n"
-
-       set I1, 9
-       sqrt N2, I1
-       .fp_eq_pasm  (N2, 3.0, EQ2)
-       print "not "
-EQ2:   print "ok 2\\n"
-
-       end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_ic" );
-    set N0, 2.0
-    pow N1, N0, 0
-    print N1
-    print "\n"
-    pow N1, N0, 1
-    print N1
-    print "\n"
-    pow N1, N0, 2
-    print N1
-    print "\n"
-    pow N1, N0, 3
-    print N1
-    print "\n"
-    pow N1, N0, 4
-    print N1
-    print "\n"
-    pow N1, N0, 5
-    print N1
-    print "\n"
-    pow N1, N0, 6
-    print N1
-    print "\n"
-    pow N1, N0, 7
-    print N1
-    print "\n"
-    pow N1, N0, -1
-    print N1
-    print "\n"
-    pow N1, N0, -2
-    print N1
-    print "\n"
-    pow N1, N0, -3
-    print N1
-    print "\n"
-    pow N1, N0, -4
-    print N1
-    print "\n"
-    pow N1, N0, -5
-    end
-CODE
-1
-2
-4
-8
-16
-32
-64
-128
-0.5
-0.25
-0.125
-0.0625
-OUTPUT
-
-pasm_output_is( <<'CODE', <<OUTPUT, "pow_n_n_i" );
-    set N0, 2.0
-    set I0, 0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    inc I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    set I0, -1
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    dec I0
-    pow N1, N0, I0
-    print N1
-    print "\n"
-    end
-CODE
-1
-2
-4
-8
-16
-32
-64
-0.5
-0.25
-0.125
-0.0625
-0.03125
-0.015625
-OUTPUT
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_massacre/t/pmc/complex.t
==============================================================================
--- branches/ops_massacre/t/pmc/complex.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/pmc/complex.t	Thu May 20 07:12:16 2010	(r46813)
@@ -16,6 +16,8 @@
 
 =cut
 
+.loadlib 'trans_ops'
+
 .sub main :main
     .include 'test_more.pir'
     .include 'fp_equality.pasm'

Modified: branches/ops_massacre/t/pmc/integer.t
==============================================================================
--- branches/ops_massacre/t/pmc/integer.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/pmc/integer.t	Thu May 20 07:12:16 2010	(r46813)
@@ -19,7 +19,7 @@
 .sub 'test' :main
     .include 'test_more.pir'
 
-    plan(62)
+    plan(61)
     test_init()
     test_basic_math()
     test_truthiness_and_definedness()
@@ -321,8 +321,6 @@
     is($P2,3)
     mod $P2, $P0, $P1
     is($P2,0)
-    pow $P2, $P0, $P1
-    is($P2,36)
 .end
 
 

Modified: branches/ops_massacre/t/pmc/sub.t
==============================================================================
--- branches/ops_massacre/t/pmc/sub.t	Thu May 20 05:43:45 2010	(r46812)
+++ branches/ops_massacre/t/pmc/sub.t	Thu May 20 07:12:16 2010	(r46813)
@@ -991,6 +991,7 @@
 unlink( $l1_pbc, $l2_pbc );
 
 pir_output_is( <<'CODE', <<'OUTPUT', "immediate code as const" );
+.loadlib 'trans_ops' # for atan
 .sub make_pi :immediate :anon
     $N0 = atan 1.0, 1.0
     $N0 *= 4


More information about the parrot-commits mailing list