454c454
< if (ext & 0x1)
---
> if (signedOp())
461c461
< if (ext & 0x1)
---
> if (signedOp())
482c482
< if (ext & 0x1)
---
> if (signedOp())
489c489
< if (ext & 0x1)
---
> if (signedOp())
651c651
< if (ext & 0x2) {
---
> if (signedOp()) {
689c689
< if (ext & 0x2) {
---
> if (signedOp()) {
952,962c952,964
< if (findCarry(sizeBits, resBits, arg1Bits, arg2Bits))
< resBits = mask(sizeBits);
< } else if (ext & 0x4) {
< int arg1Sign = bits(arg1Bits, sizeBits - 1);
< int arg2Sign = bits(arg2Bits, sizeBits - 1);
< int resSign = bits(resBits, sizeBits - 1);
< if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
< if (resSign == 0)
< resBits = (ULL(1) << (sizeBits - 1));
< else
< resBits = mask(sizeBits - 1);
---
> if (signedOp()) {
> int arg1Sign = bits(arg1Bits, sizeBits - 1);
> int arg2Sign = bits(arg2Bits, sizeBits - 1);
> int resSign = bits(resBits, sizeBits - 1);
> if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
> if (resSign == 0)
> resBits = (ULL(1) << (sizeBits - 1));
> else
> resBits = mask(sizeBits - 1);
> }
> } else {
> if (findCarry(sizeBits, resBits, arg1Bits, arg2Bits))
> resBits = mask(sizeBits);
987,991c989,1005
< if (arg2Bits > arg1Bits) {
< resBits = 0;
< } else if (!findCarry(sizeBits, resBits,
< arg1Bits, ~arg2Bits)) {
< resBits = mask(sizeBits);
---
> if (signedOp()) {
> int arg1Sign = bits(arg1Bits, sizeBits - 1);
> int arg2Sign = !bits(arg2Bits, sizeBits - 1);
> int resSign = bits(resBits, sizeBits - 1);
> if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
> if (resSign == 0)
> resBits = (ULL(1) << (sizeBits - 1));
> else
> resBits = mask(sizeBits - 1);
> }
> } else {
> if (arg2Bits > arg1Bits) {
> resBits = 0;
> } else if (!findCarry(sizeBits, resBits,
> arg1Bits, ~arg2Bits)) {
> resBits = mask(sizeBits);
> }
993,1002d1006
< } else if (ext & 0x4) {
< int arg1Sign = bits(arg1Bits, sizeBits - 1);
< int arg2Sign = !bits(arg2Bits, sizeBits - 1);
< int resSign = bits(resBits, sizeBits - 1);
< if ((arg1Sign == arg2Sign) && (arg1Sign != resSign)) {
< if (resSign == 0)
< resBits = (ULL(1) << (sizeBits - 1));
< else
< resBits = mask(sizeBits - 1);
< }
1033c1037
< if (ext & 0x2) {
---
> if (signedOp()) {