jitcraft/BytecodeEmitter.h
changeset 85 06a0015b6a5c
parent 80 c58dff4e560c
     1.1 --- a/jitcraft/BytecodeEmitter.h	Fri Jul 20 00:03:10 2012 -0700
     1.2 +++ b/jitcraft/BytecodeEmitter.h	Mon Jul 23 01:19:44 2012 -0700
     1.3 @@ -364,6 +364,7 @@
     1.4          writeUint32(index);
     1.5          writeUint32(argc);
     1.6      }
     1.7 +
     1.8      void getarray(PrimitiveType type) {
     1.9          switch (type) {
    1.10            case PrimitiveType_Float:
    1.11 @@ -392,6 +393,43 @@
    1.12              break;
    1.13          }
    1.14      }
    1.15 +
    1.16 +    void getglobal(Variable *var) {
    1.17 +        ensure(OP_GETGLOBAL_F_LENGTH);
    1.18 +        if (var->type()->isPrimitive()) {
    1.19 +            switch (var->type()->primitive()) {
    1.20 +              case PrimitiveType_Float:
    1.21 +                writeOp(OP_GETGLOBAL_F);
    1.22 +                break;
    1.23 +              default:
    1.24 +                assert(var->type()->primitive() == PrimitiveType_Int32);
    1.25 +                writeOp(OP_GETGLOBAL_I);
    1.26 +                break;
    1.27 +            }
    1.28 +        } else {
    1.29 +            writeOp(OP_GETGLOBAL_O);
    1.30 +            markOop(1);
    1.31 +        }
    1.32 +        writeUint32(var->slot());
    1.33 +    }
    1.34 +    void setglobal(Variable *var) {
    1.35 +        ensure(OP_SETGLOBAL_F_LENGTH);
    1.36 +        if (var->type()->isPrimitive()) {
    1.37 +            switch (var->type()->primitive()) {
    1.38 +              case PrimitiveType_Float:
    1.39 +                writeOp(OP_SETGLOBAL_F);
    1.40 +                break;
    1.41 +              default:
    1.42 +                assert(var->type()->primitive() == PrimitiveType_Int32);
    1.43 +                writeOp(OP_SETGLOBAL_I);
    1.44 +                break;
    1.45 +            }
    1.46 +        } else {
    1.47 +            writeOp(OP_SETGLOBAL_O);
    1.48 +        }
    1.49 +        writeUint32(var->slot());
    1.50 +    }
    1.51 +
    1.52      void getarray_o() {
    1.53          singleByteOp(OP_GETARRAY_O);
    1.54          markOop(1);
    1.55 @@ -408,10 +446,11 @@
    1.56      void cvt_i2f() {
    1.57          singleByteOp(OP_CVT_I2F);
    1.58      }
    1.59 -    void newarray_lifo(Handle<Map> map) {
    1.60 +    void newarray(Handle<Map> map, Heap::Tenure tenure) {
    1.61          recordOops();
    1.62 -        ensure(OP_NEWARRAY_LIFO_LENGTH);
    1.63 -        writeOp(OP_NEWARRAY_LIFO);
    1.64 +        ensure(OP_NEWARRAY_LENGTH);
    1.65 +        writeOp(OP_NEWARRAY);
    1.66 +        writeUint8(tenure);
    1.67          writeObject(map);
    1.68          markOop(1);
    1.69      }