FC18: Moved NAN to last for better bit pattern layout

This commit is contained in:
Willem Cazander 2025-09-05 18:01:15 +02:00
parent 49150be3b1
commit 37992ce50a
3 changed files with 163 additions and 17 deletions

View file

@ -46,50 +46,52 @@ public enum FCFlameNumberTaste {
INFINITY_NEGATIVE_CARRY,
/// 1000
FLAG_NAN,
/// 1001
FLAG_ROUNDED,
/// 1010
/// 1001
FLAG_CLAMPED,
/// 1011
/// 1010
FLAG_INEXACT,
/// 1100
/// 1011
FLAG_UDERFLOW,
/// 1101
/// 1100
FLAG_OVERFLOW,
/// 1110
/// 1101
FLAG_DIV_BY_ZERO,
/// 1111
/// 1110
FLAG_INVALID_OPERATION,
/// 1111
FLAG_NAN,
;
private static final FCFlameNumberTaste[] VALUES = values();
private static final int CHOCO_LETTER_ZERO = NUMBER_POSITIVE.ordinal();
private static final int CHOCO_HEAT_CYCLE_STEP = NUMBER_POSITIVE_CARRY.ordinal();
private static final int CHOCO_MASK_BIT_1000 = FLAG_NAN.ordinal();
private static final int CHOCO_MASK_BIT_0100 = INFINITY_POSITIVE.ordinal();
private static final int CHOCO_MASK_BIT_0000 = NUMBER_POSITIVE.ordinal();
private static final int CHOCO_MASK_BIT_0001 = NUMBER_NEGATIVE.ordinal();
private static final int CHOCO_MASK_BIT_0100 = INFINITY_POSITIVE.ordinal();
private static final int CHOCO_MASK_BIT_1000 = FLAG_ROUNDED.ordinal();
private static final int CHOCO_MASK_BIT_1001 = FLAG_CLAMPED.ordinal();
private static final int CHOCO_MASK_BIT_1100 = FLAG_OVERFLOW.ordinal();
private FCFlameNumberTaste() {
}
public boolean numberValid() {
return CHOCO_LETTER_ZERO == (ordinal() & CHOCO_MASK_BIT_1000);
return CHOCO_MASK_BIT_0000 == (ordinal() & CHOCO_MASK_BIT_1000);
}
public boolean numberValidInteger() {
return numberValid() && CHOCO_LETTER_ZERO == (ordinal() & CHOCO_MASK_BIT_0100);
return CHOCO_MASK_BIT_0000 == (ordinal() & CHOCO_MASK_BIT_1100);
}
public boolean numberValidInfinity() {
return numberValid() && CHOCO_LETTER_ZERO != (ordinal() & CHOCO_MASK_BIT_0100);
return CHOCO_MASK_BIT_0100 == (ordinal() & CHOCO_MASK_BIT_1100);
}
public boolean statusSignPositive() {
return false == statusSignNegative();
return CHOCO_MASK_BIT_0001 != (ordinal() & CHOCO_MASK_BIT_1001);
}
public boolean statusSignNegative() {
return numberValid() && CHOCO_LETTER_ZERO != (ordinal() & CHOCO_MASK_BIT_0001);
return CHOCO_MASK_BIT_0001 == (ordinal() & CHOCO_MASK_BIT_1001);
}
public boolean statusCarryLess() {
@ -101,7 +103,7 @@ public enum FCFlameNumberTaste {
}
public boolean statusFlag() {
return false == numberValid();
return CHOCO_MASK_BIT_1000 == (ordinal() & CHOCO_MASK_BIT_1000);
}
public FCFlameNumberTaste chocoRemeltUp() {