I'd like some abs ops so I can make the fp tests better, does
the attached patch do the right thing?  I'll commit tomorrow if
no one complains.

Alex Gough
-- 
http://users.ox.ac.uk/~shug0957/
Index: core.ops
===================================================================
RCS file: /home/perlcvs/parrot/core.ops,v
retrieving revision 1.33
diff -u -r1.33 core.ops
--- core.ops    2001/11/29 04:25:02     1.33
+++ core.ops    2001/11/29 18:36:41
@@ -739,6 +739,22 @@
 
 ########################################
 
+=item B<abs>(i|n, i|ic|n|nc)
+
+Set $1 to absolute value of $2.
+
+=cut
+
+AUTO_OP abs(i, i|ic|n|nc) {
+  $1 = (INTVAL)labs((INTVAL)$2);
+}
+
+AUTO_OP abs(n, n|nc|i|ic) {
+  $1 = (FLOATVAL)fabs((FLOATVAL)$2);
+}
+
+########################################
+
 =item B<cmod>(i, i, i)
 
 =item B<cmod>(i, i, ic)
Index: t/op/integer.t
===================================================================
RCS file: /home/perlcvs/parrot/t/op/integer.t,v
retrieving revision 1.13
diff -u -r1.13 integer.t
--- t/op/integer.t      2001/10/14 00:43:50     1.13
+++ t/op/integer.t      2001/11/29 18:36:41
@@ -1,6 +1,6 @@
 #! perl -w
 
-use Parrot::Test tests => 27;
+use Parrot::Test tests => 28;
 
 output_is(<<CODE, <<OUTPUT, "set_i_ic");
        # XXX: Need a test for writing outside the set of available
@@ -169,6 +169,25 @@
 574908040
 862362060
 1724724120
+OUTPUT
+
+output_is(<<'CODE', <<'OUTPUT', "abs(i, i|ic)");
+       set     I0, 1
+       abs     I1, -1
+       abs     I0, I0
+       set     I2, -1
+       abs     I2, I2
+       print   I0
+       print   "\n"    
+       print   I1
+       print   "\n"    
+       print   I2
+       print   "\n"    
+       end
+CODE
+1
+1
+1
 OUTPUT
 
 output_is(<<CODE, <<OUTPUT, "sub_i");
Index: t/op/number.t
===================================================================
RCS file: /home/perlcvs/parrot/t/op/number.t,v
retrieving revision 1.9
diff -u -r1.9 number.t
--- t/op/number.t       2001/10/14 00:43:50     1.9
+++ t/op/number.t       2001/11/29 18:36:42
@@ -1,6 +1,6 @@
 #! perl -w
 
-use Parrot::Test tests => 27;
+use Parrot::Test tests => 28;
 
 output_is(<<CODE, <<OUTPUT, "set_n_nc");
        set     N0, 1.0
@@ -151,6 +151,29 @@
         end
 CODE
 420042.000000
+OUTPUT
+
+output_is(<<'CODE', <<'OUTPUT', "abs(n, i|ic|n|nc)");
+       set     I0, -1
+       abs     N0, I0
+       abs     N1, -1
+       set     N2, -1
+       abs     N2, N2
+       abs     N3, -1.0
+       print N0
+       print "\n"
+       print N1
+       print "\n"
+       print N2
+       print "\n"
+       print N3
+       print "\n"
+       end
+CODE
+1.000000
+1.000000
+1.000000
+1.000000
 OUTPUT
 
 output_is(<<CODE, <<OUTPUT, "mul_i");

Reply via email to