NestedVM

http://www.brianweb.net/personal/publications.php
スライドでは、メモリを int として表現するとなっていたけれど、
浮動小数点数の扱いはどうするんだろう?
int配列のビットパターンを効率よく floatやdouble に変換するテクニックがあるのだろうか?

      • -

http://darcs.brianweb.net/nestedvm/src/org/ibex/nestedvm/ Interpreter.java

    // Floating Point Registers
    private int[] fpregs = new int[32];
    // 24-31 - unused
    // 23 - conditional bit
    // 18-22 - unused
    // 12-17 - cause bits (unimplemented)
    // 7-11  - enables bits (unimplemented)
    // 2-6   - flags (unimplemented)
    // 0-1   - rounding mode (only implemented for fixed point conversions)

    private final double getDouble(int r) {
        return Double.longBitsToDouble(((fpregs[r+1]&0xffffffffL) << 32) | (fpregs[r]&0xffffffffL));
    }
    private final void setDouble(int r, double d) {
        long l = Double.doubleToLongBits(d);
        fpregs[r+1] = (int)(l >>> 32); fpregs[r] = (int)l;
    }
    private final float getFloat(int r) { return Float.intBitsToFloat(fpregs[r]); }
    private final void setFloat(int r, float f) { fpregs[r] = Float.floatToRawIntBits(f); }

これみたい。