simon       01/09/13 00:21:38

  Modified:    .        assemble.pl basic_opcodes.ops disassemble.pl
                        opcode_table
  Log:
  Math ops from Gibbs Tanton.
  
  Revision  Changes    Path
  1.9       +8 -8      parrot/assemble.pl
  
  Index: assemble.pl
  ===================================================================
  RCS file: /home/perlcvs/parrot/assemble.pl,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -w -r1.8 -r1.9
  --- assemble.pl       2001/09/12 09:54:46     1.8
  +++ assemble.pl       2001/09/13 07:21:37     1.9
  @@ -16,20 +16,20 @@
              n => 'd',
          );
   
  -my %real_type=('i'=>'i',
  -              'n'=>'n',
  -              'N'=>'i',
  -              'I'=>'i',
  -              'S'=>'i',
  -              's'=>'i',
  -              'D'=>'i');
  +my %real_type=('i'=>'l',
  +              'n'=>'d',
  +              'N'=>'l',
  +              'I'=>'l',
  +              'S'=>'l',
  +              's'=>'l',
  +              'D'=>'l');
   
   my $sizeof_packi = length(pack($pack_type{i},1024));
   
   open GUTS, "interp_guts.h";
   my $opcode;
   while (<GUTS>) {
  -    next unless /\tx\[(\d+)\] = ([a-z_]+);/;
  +    next unless /\tx\[(\d+)\] = ([a-z0-9_]+);/;
       $opcodes{$2}{CODE} = $1;
   }
   
  
  
  
  1.10      +204 -1    parrot/basic_opcodes.ops
  
  Index: basic_opcodes.ops
  ===================================================================
  RCS file: /home/perlcvs/parrot/basic_opcodes.ops,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -w -r1.9 -r1.10
  --- basic_opcodes.ops 2001/09/13 07:14:23     1.9
  +++ basic_opcodes.ops 2001/09/13 07:21:37     1.10
  @@ -5,6 +5,7 @@
    */
   
   #include "parrot.h"
  +#include "math.h"
   
   // SET Ix, CONSTANT
   AUTO_OP set_i_ic {
  @@ -208,7 +209,7 @@
   
   // PRINT Nx
   AUTO_OP print_n {
  -  printf("N reg %li is %Lf\n", P1, NUM_REG(P1));
  +  printf("N reg %li is %f\n", P1, NUM_REG(P1));
   }
    
   // INC Nx
  @@ -335,3 +336,205 @@
   // NOOP
   AUTO_OP noop {
   }
  +
  +// TRANSCENDENTAL MATH FUNCTIONS
  +
  +// sin_n_n
  +AUTO_OP sin_n_n {
  +   NUM_REG(P1) = sin(NUM_REG(P2));
  +}
  +
  +// cos_n_n
  +AUTO_OP cos_n_n {
  +   NUM_REG(P1) = cos(NUM_REG(P2));
  +}
  +
  +// tan_n_n
  +AUTO_OP tan_n_n {
  +   NUM_REG(P1) = tan(NUM_REG(P2));
  +}
  +
  +// sec_n_n
  +AUTO_OP sec_n_n {
  +   NUM_REG(P1) = ((NV)1) / cos(NUM_REG(P2));
  +}
  +
  +// atan_n_n
  +AUTO_OP atan_n_n {
  +   NUM_REG(P1) = atan(NUM_REG(P2));
  +}
  +
  +// atan2_n_n_n
  +AUTO_OP atan2_n_n_n {
  +   NUM_REG(P1) = atan2(NUM_REG(P2), NUM_REG(P3));
  +}
  +
  +// asin_n_n
  +AUTO_OP asin_n_n {
  +   NUM_REG(P1) = asin(NUM_REG(P2));
  +}
  +
  +// acos_n_n
  +AUTO_OP acos_n_n {
  +   NUM_REG(P1) = acos(NUM_REG(P2));
  +}
  +
  +// asec_n_n
  +AUTO_OP asec_n_n {
  +   NUM_REG(P1) = acos(((NV)1) / NUM_REG(P2));
  +}
  +
  +// cosh_n_n
  +AUTO_OP cosh_n_n {
  +   NUM_REG(P1) = cosh(NUM_REG(P2));
  +}
  +
  +// sinh_n_n
  +AUTO_OP sinh_n_n {
  +   NUM_REG(P1) = sinh(NUM_REG(P2));
  +}
  +
  +// tanh_n_n
  +AUTO_OP tanh_n_n {
  +   NUM_REG(P1) = tanh(NUM_REG(P2));
  +}
  +
  +// sech_n_n
  +AUTO_OP sech_n_n {
  +   NUM_REG(P1) = ((NV)1) / cosh(NUM_REG(P2));
  +}
  +
  +// log2_n_n
  +AUTO_OP log2_n_n {
  +   NUM_REG(P1) = log(NUM_REG(P2)) / log((NV)2);
  +}
  +
  +// log10_n_n
  +AUTO_OP log10_n_n {
  +   NUM_REG(P1) = log10(NUM_REG(P2));
  +}
  +
  +// ln_n_n
  +AUTO_OP ln_n_n {
  +   NUM_REG(P1) = log(NUM_REG(P2));
  +}
  +
  +// exp_n_n
  +AUTO_OP exp_n_n {
  +   NUM_REG(P1) = exp(NUM_REG(P2));
  +}
  +
  +// pow_n_n_n
  +AUTO_OP pow_n_n_n {
  +   NUM_REG(P1) = pow(NUM_REG(P2), NUM_REG(P3));
  +}
  +
  +// sin_n_i
  +AUTO_OP sin_n_i {
  +   NUM_REG(P1) = sin(INT_REG(P2));
  +}
  +
  +// cos_n_i
  +AUTO_OP cos_n_i {
  +   NUM_REG(P1) = cos(INT_REG(P2));
  +}
  +
  +// tan_n_i
  +AUTO_OP tan_n_i {
  +   NUM_REG(P1) = tan(INT_REG(P2));
  +}
  +
  +// sec_n_i
  +AUTO_OP sec_n_i {
  +   NUM_REG(P1) = ((NV)1) / cos(INT_REG(P2));
  +}
  +
  +// atan_n_i
  +AUTO_OP atan_n_i {
  +   NUM_REG(P1) = atan(INT_REG(P2));
  +}
  +
  +// atan2_n_n_i
  +AUTO_OP atan2_n_n_i {
  +   NUM_REG(P1) = atan2(NUM_REG(P2), INT_REG(P3));
  +}
  +
  +// atan2_n_i_n
  +AUTO_OP atan2_n_i_n {
  +   NUM_REG(P1) = atan2(INT_REG(P2), NUM_REG(P3));
  +}
  +
  +// atan2_n_i_i
  +AUTO_OP atan2_n_i_i {
  +   NUM_REG(P1) = atan2(INT_REG(P2), INT_REG(P3));
  +}
  +
  +// asin_n_i
  +AUTO_OP asin_n_i {
  +   NUM_REG(P1) = asin(INT_REG(P2));
  +}
  +
  +// acos_n_i
  +AUTO_OP acos_n_i {
  +   NUM_REG(P1) = acos(INT_REG(P2));
  +}
  +
  +// asec_n_i
  +AUTO_OP asec_n_i {
  +   NUM_REG(P1) = acos(((NV)1) / ((NV)INT_REG(P2)));
  +}
  +
  +// cosh_n_i
  +AUTO_OP cosh_n_i {
  +   NUM_REG(P1) = cosh(INT_REG(P2));
  +}
  +
  +// sinh_n_i
  +AUTO_OP sinh_n_i {
  +   NUM_REG(P1) = sinh(INT_REG(P2));
  +}
  +
  +// tanh_n_i
  +AUTO_OP tanh_n_i {
  +   NUM_REG(P1) = tanh(INT_REG(P2));
  +}
  +
  +// sech_n_i
  +AUTO_OP sech_n_i {
  +   NUM_REG(P1) = ((NV)1) / cosh(INT_REG(P2));
  +}
  +
  +// log2_n_i
  +AUTO_OP log2_n_i {
  +   NUM_REG(P1) = log(INT_REG(P2)) / log((NV)2);
  +}
  +
  +// log10_n_i
  +AUTO_OP log10_n_i {
  +   NUM_REG(P1) = log10(INT_REG(P2));
  +}
  +
  +// ln_n_i
  +AUTO_OP ln_n_i {
  +   NUM_REG(P1) = log(INT_REG(P2));
  +}
  +
  +// exp_n_i
  +AUTO_OP exp_n_i {
  +   NUM_REG(P1) = exp(INT_REG(P2));
  +}
  +
  +// pow_n_n_i
  +AUTO_OP pow_n_n_i {
  +   NUM_REG(P1) = pow(NUM_REG(P2), INT_REG(P3));
  +}
  +
  +// pow_n_i_i
  +AUTO_OP pow_n_i_i {
  +   NUM_REG(P1) = pow(INT_REG(P2), INT_REG(P3));
  +}
  +
  +// pow_n_n_i
  +AUTO_OP pow_n_i_n {
  +   NUM_REG(P1) = pow(INT_REG(P2), NUM_REG(P3));
  +}
  \ No newline at end of file
  
  
  
  1.5       +1 -1      parrot/disassemble.pl
  
  Index: disassemble.pl
  ===================================================================
  RCS file: /home/perlcvs/parrot/disassemble.pl,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -w -r1.4 -r1.5
  --- disassemble.pl    2001/09/12 09:54:46     1.4
  +++ disassemble.pl    2001/09/13 07:21:37     1.5
  @@ -28,7 +28,7 @@
   open GUTS, "interp_guts.h";
   my $opcode;
   while (<GUTS>) {
  -    next unless /\tx\[(\d+)\] = ([a-z_]+);/;
  +    next unless /\tx\[(\d+)\] = ([a-z0-9_]+);/;
       $opcodes{$2}{CODE} = $1;
   }
   
  
  
  
  1.11      +42 -0     parrot/opcode_table
  
  Index: opcode_table
  ===================================================================
  RCS file: /home/perlcvs/parrot/opcode_table,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -w -r1.10 -r1.11
  --- opcode_table      2001/09/13 07:14:24     1.10
  +++ opcode_table      2001/09/13 07:21:38     1.11
  @@ -103,3 +103,45 @@
   clear_n      0
   clear_p      0
   
  +# Transcendental Math Ops
  +
  +sin_n_n        2       N N
  +cos_n_n        2       N N
  +tan_n_n        2       N N
  +sec_n_n        2       N N
  +atan_n_n       2       N N
  +atan2_n_n_n    3       N N N
  +asin_n_n       2       N N
  +acos_n_n       2       N N
  +asec_n_n       2       N N
  +cosh_n_n       2       N N
  +sinh_n_n       2       N N
  +tanh_n_n       2       N N
  +sech_n_n       2       N N
  +log2_n_n       2       N N
  +log10_n_n      2       N N
  +ln_n_n         2       N N
  +exp_n_n        2       N N
  +pow_n_n_n      3       N N N
  +sin_n_i        2       N I
  +cos_n_i        2       N I
  +tan_n_i        2       N I
  +sec_n_i        2       N I
  +atan_n_i       2       N I
  +atan2_n_n_i    3       N N I
  +atan2_n_i_n    3       N I N
  +atan2_n_i_i    3       N I I
  +asin_n_i       2       N I
  +acos_n_i       2       N I
  +asec_n_i       2       N I
  +cosh_n_i       2       N I
  +sinh_n_i       2       N I
  +tanh_n_i       2       N I
  +sech_n_i       2       N I
  +log2_n_i       2       N I
  +log10_n_i      2       N I
  +ln_n_i         2       N I
  +exp_n_i        2       N I
  +pow_n_n_i      3       N N I
  +pow_n_i_i      3       N I I
  +pow_n_i_n      3       N I N
  
  
  

Reply via email to