diff options
author | Jerry Ge <jerry.ge@arm.com> | 2022-08-12 16:12:40 -0700 |
---|---|---|
committer | Jerry Ge <jerry.ge@arm.com> | 2022-08-24 23:52:00 +0100 |
commit | d511f9e604c3e2b915d6f6b7a4975b23ac06041d (patch) | |
tree | 01e2b6be77e1f84a1e3be941481b87ef30a8e462 /reference_model | |
parent | 286f834ce60e4ebcaaf131cb7da97ebf79098fa0 (diff) | |
download | reference_model-d511f9e604c3e2b915d6f6b7a4975b23ac06041d.tar.gz |
Enabled 16-bit TABLE REQUIRE statement
Signed-off-by: Jerry Ge <jerry.ge@arm.com>
Signed-off-by: Jeremy Johnson <jeremy.johnson@arm.com>
Change-Id: Ib6e81814e022f33e45430e47ca99d6d9f9e0e101
Diffstat (limited to 'reference_model')
-rw-r--r-- | reference_model/src/ops/ewise_binary.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/reference_model/src/ops/ewise_binary.cc b/reference_model/src/ops/ewise_binary.cc index eadefaa..a5e1a20 100644 --- a/reference_model/src/ops/ewise_binary.cc +++ b/reference_model/src/ops/ewise_binary.cc @@ -554,10 +554,14 @@ int OpTable<Rank, InDtype>::eval() index = std::min<int32_t>(std::max<int32_t>(index, 0), NumTableEntries - 1); // 9-bit index int32_t frac = (input_truncated)&0x7F; // 7-bit fraction - // 3. interpolate, generate 16.7 (23-bit) output + // 3. Add REQUIRE CHECK for extreme large/small slopes int32_t base = table[index]; int32_t next = table[index + 1]; - int32_t value = (base << 7) + (next - base) * frac; + int32_t slope = next - base; + REQUIRE(slope <= std::numeric_limits<int16_t>::max() && slope >= std::numeric_limits<int16_t>::min(), "OpTable: slope out of int16_t range"); + + // 4. interpolate, generate 16.7 (23-bit) output + int32_t value = (base << 7) + (slope) * frac; return value; }); |