Modified RV32F instructions to support 64-bit register file and added RV64F ISA extension
This commit is contained in:
@@ -106,6 +106,21 @@ uint32_t rv_ftou(uint32_t a, uint32_t frm, uint32_t* fflags) {
|
||||
return r;
|
||||
}
|
||||
|
||||
// simx64
|
||||
uint64_t rv_ftol(uint32_t a, uint32_t frm, uint32_t* fflags) {
|
||||
softfloat_roundingMode = frm;
|
||||
auto r = f32_to_i64(to_float32_t(a), frm, true);
|
||||
if (fflags) { *fflags = get_fflags(); }
|
||||
return r;
|
||||
}
|
||||
|
||||
uint64_t rv_ftolu(uint32_t a, uint32_t frm, uint32_t* fflags) {
|
||||
softfloat_roundingMode = frm;
|
||||
auto r = f32_to_ui64(to_float32_t(a), frm, true);
|
||||
if (fflags) { *fflags = get_fflags(); }
|
||||
return r;
|
||||
}
|
||||
|
||||
uint32_t rv_itof(uint32_t a, uint32_t frm, uint32_t* fflags) {
|
||||
softfloat_roundingMode = frm;
|
||||
auto r = i32_to_f32(a);
|
||||
@@ -120,6 +135,21 @@ uint32_t rv_utof(uint32_t a, uint32_t frm, uint32_t* fflags) {
|
||||
return from_float32_t(r);
|
||||
}
|
||||
|
||||
// simx64
|
||||
uint32_t rv_ltof(uint64_t a, uint32_t frm, uint32_t* fflags) {
|
||||
softfloat_roundingMode = frm;
|
||||
auto r = i64_to_f32(a);
|
||||
if (fflags) { *fflags = get_fflags(); }
|
||||
return from_float32_t(r);
|
||||
}
|
||||
|
||||
uint32_t rv_lutof(uint64_t a, uint32_t frm, uint32_t* fflags) {
|
||||
softfloat_roundingMode = frm;
|
||||
auto r = ui64_to_f32(a);
|
||||
if (fflags) { *fflags = get_fflags(); }
|
||||
return from_float32_t(r);
|
||||
}
|
||||
|
||||
uint32_t rv_flt(uint32_t a, uint32_t b, uint32_t* fflags) {
|
||||
auto r = f32_lt(to_float32_t(a), to_float32_t(b));
|
||||
if (fflags) { *fflags = get_fflags(); }
|
||||
|
||||
@@ -20,8 +20,14 @@ uint32_t rv_fsqrt(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
|
||||
uint32_t rv_ftoi(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
uint32_t rv_ftou(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
// simx64
|
||||
uint64_t rv_ftol(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
uint64_t rv_ftolu(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
uint32_t rv_itof(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
uint32_t rv_utof(uint32_t a, uint32_t frm, uint32_t* fflags);
|
||||
// simx64
|
||||
uint32_t rv_ltof(uint64_t a, uint32_t frm, uint32_t* fflags);
|
||||
uint32_t rv_lutof(uint64_t a, uint32_t frm, uint32_t* fflags);
|
||||
|
||||
uint32_t rv_fclss(uint32_t a);
|
||||
uint32_t rv_fsgnj(uint32_t a, uint32_t b);
|
||||
|
||||
@@ -21,15 +21,15 @@ inline uint64_t align_size(uint64_t size, uint64_t alignment) {
|
||||
return (size + alignment - 1) & ~(alignment - 1);
|
||||
}
|
||||
|
||||
// Apply integer sign extension
|
||||
// 64-bit sign extension
|
||||
inline uint64_t signExt(uint64_t w, uint64_t bit, uint64_t mask) {
|
||||
if (w >> (bit - 1))
|
||||
w |= ~mask;
|
||||
return w;
|
||||
}
|
||||
|
||||
// Apply integer sign extension
|
||||
inline uint32_t signExt32(uint32_t w, uint32_t bit, uint32_t mask) {
|
||||
// 128-bit sign extension
|
||||
inline __uint128_t signExt128(__uint128_t w, uint32_t bit, __uint128_t mask) {
|
||||
if (w >> (bit - 1))
|
||||
w |= ~mask;
|
||||
return w;
|
||||
|
||||
Reference in New Issue
Block a user