Providing accessors for 64-bit arithmetic operations
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 26 Jan 2016 08:43:29 +0100
changeset 1865412cc2201b1a
parent 1864 44ade87ef2a4
child 1866 5447274f0321
Providing accessors for 64-bit arithmetic operations
rt/vm/src/main/java/org/apidesign/vm4brwsr/NumberOperations.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/NumberOperations.java	Tue Jan 26 07:28:25 2016 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/NumberOperations.java	Tue Jan 26 08:43:29 2016 +0100
     1.3 @@ -21,6 +21,7 @@
     1.4      private static final int DIV32 = 1;
     1.5      private static final int MOD32 = 2;
     1.6      private static final int MUL32 = 4;
     1.7 +    private static final int BIT64 = 8;
     1.8  
     1.9      private int used;
    1.10  
    1.11 @@ -39,55 +40,68 @@
    1.12      }
    1.13  
    1.14      public String add64() {
    1.15 -        return "(@1).add64(@2)";
    1.16 +        used |= BIT64;
    1.17 +        return "__add64(@1,@2)";
    1.18      }
    1.19  
    1.20      public String sub64() {
    1.21 -        return "(@1).sub64(@2)";
    1.22 +        used |= BIT64;
    1.23 +        return "__sub64(@1,@2)";
    1.24      }
    1.25  
    1.26      public String mul64() {
    1.27 -        return "(@1).mul64(@2)";
    1.28 +        used |= BIT64;
    1.29 +        return "__mul64(@1,@2)";
    1.30      }
    1.31  
    1.32      public String div64() {
    1.33 -        return "(@1).div64(@2)";
    1.34 +        used |= BIT64;
    1.35 +        return "__div64(@1,@2)";
    1.36      }
    1.37  
    1.38      public String mod64() {
    1.39 -        return "(@1).mod64(@2)";
    1.40 +        used |= BIT64;
    1.41 +        return "__mod64(@1,@2)";
    1.42      }
    1.43  
    1.44      public String and64() {
    1.45 -        return "(@1).and64(@2)";
    1.46 +        used |= BIT64;
    1.47 +        return "__and64(@1,@2)";
    1.48      }
    1.49  
    1.50      public String or64() {
    1.51 -        return "(@1).or64(@2)";
    1.52 +        used |= BIT64;
    1.53 +        return "__or64(@1,@2)";
    1.54      }
    1.55  
    1.56      public String xor64() {
    1.57 -        return "(@1).xor64(@2)";
    1.58 +        used |= BIT64;
    1.59 +        return "__xor64(@1,@2)";
    1.60      }
    1.61  
    1.62      public String neg64() {
    1.63 -        return "(@1).neg64()";
    1.64 +        used |= BIT64;
    1.65 +        return "__neg64(@1)";
    1.66      }
    1.67  
    1.68      public String shl64() {
    1.69 -        return "(@1).shl64(@2)";
    1.70 +        used |= BIT64;
    1.71 +        return "__shl64(@1,@2)";
    1.72      }
    1.73  
    1.74      public String shr64() {
    1.75 -        return "(@1).shr64(@2)";
    1.76 +        used |= BIT64;
    1.77 +        return "__shr64(@1,@2)";
    1.78      }
    1.79  
    1.80      public String ushr64() {
    1.81 -        return "(@1).ushr64(@2)";
    1.82 +        used |= BIT64;
    1.83 +        return "__ushr64(@1,@2)";
    1.84      }
    1.85  
    1.86      public String compare64() {
    1.87 -        return "(@2).compare64(@1)";
    1.88 +        used |= BIT64;
    1.89 +        return "__compare64(@1,@2)";
    1.90      }
    1.91  
    1.92      public String generate() {
    1.93 @@ -133,6 +147,24 @@
    1.94                  ""
    1.95              );
    1.96          }
    1.97 +        if ((used & BIT64) != 0) {
    1.98 +            sb.append(
    1.99 +                "    var __add64 = function(x,y) { return x.add64(y); };\n" +
   1.100 +                "    var __sub64 = function(x,y) { return x.sub64(y); };\n" +
   1.101 +                "    var __mul64 = function(x,y) { return x.mul64(y); };\n" +
   1.102 +                "    var __div64 = function(x,y) { return x.div64(y); };\n" +
   1.103 +                "    var __mod64 = function(x,y) { return x.mod64(y); };\n" +
   1.104 +                "    var __and64 = function(x,y) { return x.and64(y); };\n" +
   1.105 +                "    var __or64 = function(x,y) { return x.or64(y); };\n" +
   1.106 +                "    var __xor64 = function(x,y) { return x.xor64(y); };\n" +
   1.107 +                "    var __neg64 = function(x) { return x.neg64(); };\n" +
   1.108 +                "    var __shl64 = function(x,y) { return x.shl64(y); };\n" +
   1.109 +                "    var __shr64 = function(x,y) { return x.shr64(y); };\n" +
   1.110 +                "    var __ushr64 = function(x,y) { return x.ushr64(y); };\n" +
   1.111 +                "    var __compare64 = function(x,y) { return y.compare64(x); };\n" +
   1.112 +                ""
   1.113 +            );
   1.114 +        }
   1.115          return sb.toString();
   1.116      }
   1.117  }