If memory serves me right, Rhys Weatherley wrote:
> on 32-bit, 64-bit, and native-sized integer types (8-bit
> types don't need it).

Hmm... maybe there's only one way to stop this loooong thread ...

Oct 18 20:31:20 <Nicholas>      no, no, you have it wrong. you don't 
                            *ask* us to add features. YOu just send 
                            us patches which do them :-)

Nov 25 03:09:38 <Dan>   And I'm serious. If you want a dotnet.ops file, 
                        go for it.
.....

I couldn't make myself name it "dotnet".ops so named it dotgnu.ops ...

DISCLAIMER: I don't know anything about how parrot opcodes should be
written .. So all errors are accidental and I would like somebody to
point them out to me ..

Gopal
-- 
The difference between insanity and genius is measured by success
/*
** dotgnu.ops
*/
#include "parrot/method_util.h"

VERSION = PARROT_VERSION;

=head1 NAME

dotgnu.ops

=cut

=head1 DESCRIPTION

Additional opcodes for C# compilation needed by cscc PM codegen

=cut

inline op conv_i1(inout INT) {
  $1= (int)((char)($1));
  goto NEXT();
}

inline op conv_i1_ovf(inout INT) {
  if($1 >= -128 && $1 <= 127) {
    $1= (int)((char)($1));
  }
  else {
    internal_exception(1, "Overflow exception for conv_i1_ovf\n");
  }
  goto NEXT();
}

inline op conv_u1(inout INT) {
  $1= (int)((unsigned char)($1));
  goto NEXT();
}

inline op conv_u1_ovf(inout INT) {
  if($1 >= 0 && $1 <= 256 ) {
    $1= (int)((unsigned char)($1));
  }
  else {
    internal_exception(1, "Overflow exception for conv_u1_ovf\n");
  }
  goto NEXT();
}

inline op conv_i2(inout INT) {
  $1= (int)((short)($1));
  goto NEXT();
}

inline op conv_i2_ovf(inout INT) {
  if($1 >= -32768 && $1 <= 32767 ) {
    $1= (int)((short)($1));
  }
  else
  {
    internal_exception(1, "Overflow exception for conv_i2_ovf\n");
  }
  goto NEXT();
}

inline op conv_u2(inout INT) {
  $1= (int)((unsigned short)($1));
  goto NEXT();
}

inline op conv_u2_ovf(inout INT) {
  if($1 >= 0 && $1 <= 65535) {
    $1= (int)((unsigned short)($1));
  }
  else
  {
    internal_exception(1, "Overflow exception for conv_u2_ovf\n");
  }
  goto NEXT();
}

inline op conv_i4(out INT, in NUM) {
  $1= (int)($2);
  goto NEXT();
}

inline op conv_i4(out INT, in PMC) {
  $1= (int)($2->vtable->get_integer(interpreter, $2));
  goto NEXT();
}

inline op conv_u4(out INT, in NUM) {
  $1= (unsigned int)($2);
  goto NEXT();
}

inline op conv_u4(out INT, in PMC) {
  $1= (unsigned int) ($2->vtable->get_integer(interpreter, $2));
  goto NEXT();
}

inline op conv_i8(out PMC, in INT) {
  $1->vtable->set_integer_native(interpreter, $1,$2);
  goto NEXT();
}

inline op conv_i8(out PMC, in PMC) {
  $1->vtable->set_integer_same(interpreter, $1,$2);
  goto NEXT();
}

inline op conv_i8(out PMC, in NUM) {
  $1->vtable->set_integer_native(interpreter, $1,(int)$2);
  goto NEXT();
}

inline op conv_r4(out NUM, in INT) {
  $1=  (FLOATVAL)($1);
  goto NEXT();
}

inline op conv_r4(out NUM, in PMC) {
  $1= (FLOATVAL) ($2->vtable->get_number(interpreter, $2));
  goto NEXT();
}

Reply via email to