summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/arm/insts/pred_inst.hh19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/arch/arm/insts/pred_inst.hh b/src/arch/arm/insts/pred_inst.hh
index 76d1029e8..b5095dcef 100644
--- a/src/arch/arm/insts/pred_inst.hh
+++ b/src/arch/arm/insts/pred_inst.hh
@@ -144,6 +144,25 @@ simd_modified_imm(bool op, uint8_t cmode, uint8_t data)
return bigData;
}
+static inline uint64_t
+vfp_modified_imm(uint8_t data, bool wide)
+{
+ uint64_t bigData = data;
+ uint64_t repData;
+ if (wide) {
+ repData = bits(data, 6) ? 0xFF : 0;
+ bigData = (bits(bigData, 5, 0) << 48) |
+ (repData << 54) | (bits(~bigData, 6) << 62) |
+ (bits(bigData, 7) << 63);
+ } else {
+ repData = bits(data, 6) ? 0x1F : 0;
+ bigData = (bits(bigData, 5, 0) << 19) |
+ (repData << 25) | (bits(~bigData, 6) << 30) |
+ (bits(bigData, 7) << 31);
+ }
+ return bigData;
+}
+
/**
* Base class for predicated integer operations.