- {
- if (AOP_TYPE (right) == AOP_LIT)
- {
- lit = (unsigned long) floatFromVal (AOP (right)->aopu.aop_lit);
- /* optimize if(x < 0) or if(x >= 0) */
- if (lit == 0L)
- {
- if (!sign)
- {
- /* No sign so it's always false */
- _clearCarry();
- }
- else
- {
- /* Just load in the top most bit */
- _moveA (aopGet (AOP (left), AOP_SIZE (left) - 1, FALSE));
- if (!(AOP_TYPE (result) == AOP_CRY && AOP_SIZE (result)) && ifx)
- {
- genIfxJump (ifx, "7");
- return;
- }
- else
- emit2 ("rlc a");
- }
- goto release;
- }
- }
-
- if (sign)
- {
- /* First setup h and l contaning the top most bytes XORed */
- bool fDidXor = FALSE;
- if (AOP_TYPE (left) == AOP_LIT)
- {
- unsigned long lit = (unsigned long)
- floatFromVal (AOP (left)->aopu.aop_lit);
- emit2 ("ld %s,!immedbyte", _fTmp[0],
- 0x80 ^ (unsigned int) ((lit >> ((size - 1) * 8)) & 0x0FFL));
- }
- else
- {
- emit2 ("ld a,%s", aopGet (AOP (left), size - 1, FALSE));
- emit2 ("xor a,!immedbyte", 0x80);
- emit2 ("ld %s,a", _fTmp[0]);
- fDidXor = TRUE;
- }
- if (AOP_TYPE (right) == AOP_LIT)
- {
- unsigned long lit = (unsigned long)
- floatFromVal (AOP (right)->aopu.aop_lit);
- emit2 ("ld %s,!immedbyte", _fTmp[1],
- 0x80 ^ (unsigned int) ((lit >> ((size - 1) * 8)) & 0x0FFL));
- }
- else
- {
- emit2 ("ld a,%s", aopGet (AOP (right), size - 1, FALSE));
- emit2 ("xor a,!immedbyte", 0x80);
- emit2 ("ld %s,a", _fTmp[1]);
- fDidXor = TRUE;
- }
- }
- while (size--)
- {
- /* Do a long subtract */
- if (!sign || size)
- {
- _moveA (aopGet (AOP (left), offset, FALSE));
- }
- if (sign && size == 0)
- {
- emit2 ("ld a,%s", _fTmp[0]);
- emit2 ("%s a,%s", offset == 0 ? "sub" : "sbc", _fTmp[1]);
- }
- else
- {
- /* Subtract through, propagating the carry */
- emit2 ("%s a,%s", offset == 0 ? "sub" : "sbc", aopGet (AOP (right), offset, FALSE));
- offset++;
- }
- }
- }
+ {
+ if (AOP_TYPE (right) == AOP_LIT)
+ {
+ lit = ulFromVal (AOP (right)->aopu.aop_lit);
+ /* optimize if(x < 0) or if(x >= 0) */
+ if (lit == 0L)
+ {
+ if (!sign)
+ {
+ /* No sign so it's always false */
+ _clearCarry();
+ }
+ else
+ {
+ /* Just load in the top most bit */
+ _moveA (aopGet (AOP (left), AOP_SIZE (left) - 1, FALSE));
+ if (!(AOP_TYPE (result) == AOP_CRY && AOP_SIZE (result)) && ifx)
+ {
+ genIfxJump (ifx, "7");
+ return;
+ }
+ else
+ emit2 ("rlc a");
+ }
+ goto release;
+ }
+ }
+
+ if (sign)
+ {
+ /* First setup h and l contaning the top most bytes XORed */
+ bool fDidXor = FALSE;
+ if (AOP_TYPE (left) == AOP_LIT)
+ {
+ unsigned long lit = ulFromVal (AOP (left)->aopu.aop_lit);
+ emit2 ("ld %s,!immedbyte", _fTmp[0],
+ 0x80 ^ (unsigned int) ((lit >> ((size - 1) * 8)) & 0x0FFL));
+ }
+ else
+ {
+ emit2 ("ld a,%s", aopGet (AOP (left), size - 1, FALSE));
+ emit2 ("xor a,!immedbyte", 0x80);
+ emit2 ("ld %s,a", _fTmp[0]);
+ fDidXor = TRUE;
+ }
+ if (AOP_TYPE (right) == AOP_LIT)
+ {
+ unsigned long lit = ulFromVal (AOP (right)->aopu.aop_lit);
+ emit2 ("ld %s,!immedbyte", _fTmp[1],
+ 0x80 ^ (unsigned int) ((lit >> ((size - 1) * 8)) & 0x0FFL));
+ }
+ else
+ {
+ emit2 ("ld a,%s", aopGet (AOP (right), size - 1, FALSE));
+ emit2 ("xor a,!immedbyte", 0x80);
+ emit2 ("ld %s,a", _fTmp[1]);
+ fDidXor = TRUE;
+ }
+ }
+ while (size--)
+ {
+ /* Do a long subtract */
+ if (!sign || size)
+ {
+ _moveA (aopGet (AOP (left), offset, FALSE));
+ }
+ if (sign && size == 0)
+ {
+ emit2 ("ld a,%s", _fTmp[0]);
+ emit2 ("%s a,%s", offset == 0 ? "sub" : "sbc", _fTmp[1]);
+ }
+ else
+ {
+ /* Subtract through, propagating the carry */
+ emit2 ("%s a,%s", offset == 0 ? "sub" : "sbc", aopGet (AOP (right), offset, FALSE));
+ offset++;
+ }
+ }
+ }