mirror of
https://github.com/corda/corda.git
synced 2025-06-11 20:01:46 +00:00
handle constants larger than 8 bits in subtractBorrowCR
This commit is contained in:
@ -1478,7 +1478,8 @@ subtractBorrowCR(Context* c, unsigned size UNUSED, Assembler::Constant* a,
|
|||||||
opcode(c, 0x83, 0xd8 + regCode(b));
|
opcode(c, 0x83, 0xd8 + regCode(b));
|
||||||
c->code.append(v);
|
c->code.append(v);
|
||||||
} else {
|
} else {
|
||||||
abort(c);
|
opcode(c, 0x81, 0xd8 + regCode(b));
|
||||||
|
c->code.append4(v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,6 +234,54 @@ public class Longs {
|
|||||||
expect((a ^ 25214903884L) == (2L ^ 25214903884L));
|
expect((a ^ 25214903884L) == (2L ^ 25214903884L));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ long b = 2;
|
||||||
|
expect((-281474976710656L) >> b == -281474976710656L >> 2);
|
||||||
|
expect((-281474976710656L) >>> b == -281474976710656L >>> 2);
|
||||||
|
expect((-281474976710656L) << b == -281474976710656L << 2);
|
||||||
|
expect((-281474976710656L) + b == -281474976710656L + 2L);
|
||||||
|
expect((-281474976710656L) - b == -281474976710656L - 2L);
|
||||||
|
expect((-281474976710656L) * b == -281474976710656L * 2L);
|
||||||
|
expect((-281474976710656L) / b == -281474976710656L / 2L);
|
||||||
|
expect((-281474976710656L) % b == -281474976710656L % 2L);
|
||||||
|
expect(((-281474976710656L) & b) == (-281474976710656L & 2L));
|
||||||
|
expect(((-281474976710656L) | b) == (-281474976710656L | 2L));
|
||||||
|
expect(((-281474976710656L) ^ b) == (-281474976710656L ^ 2L));
|
||||||
|
|
||||||
|
b = 2;
|
||||||
|
expect(281474976710656L >> b == 281474976710656L >> 2);
|
||||||
|
expect(281474976710656L >>> b == 281474976710656L >>> 2);
|
||||||
|
expect(281474976710656L << b == 281474976710656L << 2);
|
||||||
|
expect(281474976710656L + b == 281474976710656L + 2L);
|
||||||
|
expect(281474976710656L - b == 281474976710656L - 2L);
|
||||||
|
expect(281474976710656L * b == 281474976710656L * 2L);
|
||||||
|
expect(281474976710656L / b == 281474976710656L / 2L);
|
||||||
|
expect(281474976710656L % b == 281474976710656L % 2L);
|
||||||
|
expect((281474976710656L & b) == (281474976710656L & 2L));
|
||||||
|
expect((281474976710656L | b) == (281474976710656L | 2L));
|
||||||
|
expect((281474976710656L ^ b) == (281474976710656L ^ 2L));
|
||||||
|
}
|
||||||
|
|
||||||
|
{ long a = 2L;
|
||||||
|
expect(a + (-281474976710656L) == 2L + (-281474976710656L));
|
||||||
|
expect(a - (-281474976710656L) == 2L - (-281474976710656L));
|
||||||
|
expect(a * (-281474976710656L) == 2L * (-281474976710656L));
|
||||||
|
expect(a / (-281474976710656L) == 2L / (-281474976710656L));
|
||||||
|
expect(a % (-281474976710656L) == 2L % (-281474976710656L));
|
||||||
|
expect((a & (-281474976710656L)) == (2L & (-281474976710656L)));
|
||||||
|
expect((a | (-281474976710656L)) == (2L | (-281474976710656L)));
|
||||||
|
expect((a ^ (-281474976710656L)) == (2L ^ (-281474976710656L)));
|
||||||
|
|
||||||
|
a = 2L;
|
||||||
|
expect(a + 281474976710656L == 2L + 281474976710656L);
|
||||||
|
expect(a - 281474976710656L == 2L - 281474976710656L);
|
||||||
|
expect(a * 281474976710656L == 2L * 281474976710656L);
|
||||||
|
expect(a / 281474976710656L == 2L / 281474976710656L);
|
||||||
|
expect(a % 281474976710656L == 2L % 281474976710656L);
|
||||||
|
expect((a & 281474976710656L) == (2L & 281474976710656L));
|
||||||
|
expect((a | 281474976710656L) == (2L | 281474976710656L));
|
||||||
|
expect((a ^ 281474976710656L) == (2L ^ 281474976710656L));
|
||||||
|
}
|
||||||
|
|
||||||
{ long x = 231;
|
{ long x = 231;
|
||||||
expect((x >> 32) == 0);
|
expect((x >> 32) == 0);
|
||||||
expect((x >>> 32) == 0);
|
expect((x >>> 32) == 0);
|
||||||
|
Reference in New Issue
Block a user