Showing the changes to src/vm/execution_table.cpp (1 of 5 files). Show all
Unified · Split
| @@ -66,8 +66,22 @@ namespace · 65 unmodified lines | |||
| 66 | EXEC_DECL(shlw) { vt_ref<word_t>(r.dest) = vt_ref<word_t>(r.mid) << vt_ref<word_t>(r.src); } | 66 | EXEC_DECL(shlw) { vt_ref<word_t>(r.dest) = vt_ref<word_t>(r.mid) << vt_ref<word_t>(r.src); } |
| 67 | EXEC_DECL(shll) { vt_ref<big_t>(r.dest) = vt_ref<big_t>(r.mid) << vt_ref<big_t>(r.src); } | 67 | EXEC_DECL(shll) { vt_ref<big_t>(r.dest) = vt_ref<big_t>(r.mid) << vt_ref<big_t>(r.src); } |
| 68 | EXEC_DECL(shrb) { vt_ref<byte_t>(r.dest) = vt_ref<byte_t>(r.mid) >> vt_ref<byte_t>(r.src); } | 68 | EXEC_DECL(shrb) { vt_ref<byte_t>(r.dest) = vt_ref<byte_t>(r.mid) >> vt_ref<byte_t>(r.src); } |
| 69 | EXEC_DECL(shrw) { vt_ref<word_t>(r.dest) = vt_ref<word_t>(r.mid) >> vt_ref<word_t>(r.src); } | 69 | EXEC_DECL(shrw) |
| 70 | EXEC_DECL(shrl) { vt_ref<big_t>(r.dest) = vt_ref<big_t>(r.mid) >> vt_ref<big_t>(r.src); } | 70 | { |
| 71 | vt_ref<word_t>(r.dest) = vt_ref<word_t>(r.mid) >> vt_ref<word_t>(r.src); | ||
| 72 | // Right shifting a negative number is implementation dependent in C++. | ||
| 73 | // Assert the current compiler defaults to arithmetic shifting, not logical. | ||
| 74 | assert(vt_ref<word_t>(r.mid) >= 0 || (vt_ref<word_t>(r.mid) < 0 && vt_ref<word_t>(r.dest) < 0)); | ||
| 75 | } | ||
| 76 | |||
| 77 | EXEC_DECL(shrl) | ||
| 78 | { | ||
| 79 | vt_ref<big_t>(r.dest) = vt_ref<big_t>(r.mid) >> vt_ref<big_t>(r.src); | ||
| 80 | // Right shifting a negative number is implementation dependent in C++. | ||
| 81 | // Assert the current compiler defaults to arithmetic shifting, not logical. | ||
| 82 | assert(vt_ref<word_t>(r.mid) >= 0 || (vt_ref<word_t>(r.mid) < 0 && vt_ref<word_t>(r.dest) < 0)); | ||
| 83 | } | ||
| 84 | |||
| 71 | EXEC_DECL(lsrw) { vt_ref<word_t>(r.dest) = vt_ref<uword_t>(r.mid) >> vt_ref<word_t>(r.src); } | 85 | EXEC_DECL(lsrw) { vt_ref<word_t>(r.dest) = vt_ref<uword_t>(r.mid) >> vt_ref<word_t>(r.src); } |
| 72 | EXEC_DECL(lsrl) { vt_ref<big_t>(r.dest) = vt_ref<ubig_t>(r.mid) >> vt_ref<big_t>(r.src); } | 86 | EXEC_DECL(lsrl) { vt_ref<big_t>(r.dest) = vt_ref<ubig_t>(r.mid) >> vt_ref<big_t>(r.src); } |
| 73 | 87 | ||
| @@ -75,14 +89,14 @@ namespace · 1 unmodified line | |||
| 75 | // Conversion operations | 89 | // Conversion operations |
| 76 | // | 90 | // |
| 77 | 91 | ||
| 78 | EXEC_DECL(cvtbw) { vt_ref<word_t>(r.dest) = std::numeric_limits<byte_t>::max() & vt_ref<byte_t>(r.src); } | 92 | EXEC_DECL(cvtbw) { vt_ref<word_t>(r.dest) = vt_ref<byte_t>(r.src); } |
| 79 | EXEC_DECL(cvtwb) { vt_ref<byte_t>(r.dest) = std::numeric_limits<byte_t>::max() & vt_ref<word_t>(r.src); } | 93 | EXEC_DECL(cvtwb) { vt_ref<byte_t>(r.dest) = vt_ref<word_t>(r.src); } |
| 80 | EXEC_DECL(cvtwl) { vt_ref<big_t>(r.dest) = std::numeric_limits<word_t>::max() & vt_ref<word_t>(r.src); } | 94 | EXEC_DECL(cvtwl) { vt_ref<big_t>(r.dest) = vt_ref<word_t>(r.src); } |
| 81 | EXEC_DECL(cvtlw) { vt_ref<word_t>(r.dest) = std::numeric_limits<word_t>::max() & vt_ref<big_t>(r.src); } | 95 | EXEC_DECL(cvtlw) { vt_ref<word_t>(r.dest) = static_cast<word_t>(vt_ref<big_t>(r.src)); } |
| 82 | EXEC_DECL(cvtrf) { vt_ref<short_real_t>(r.dest) = static_cast<short_real_t>(vt_ref<real_t>(r.src)); } | 96 | EXEC_DECL(cvtrf) { vt_ref<short_real_t>(r.dest) = static_cast<short_real_t>(vt_ref<real_t>(r.src)); } |
| 83 | EXEC_DECL(cvtfr) { vt_ref<real_t>(r.dest) = static_cast<real_t>(vt_ref<short_real_t>(r.src)); } | 97 | EXEC_DECL(cvtfr) { vt_ref<real_t>(r.dest) = static_cast<real_t>(vt_ref<short_real_t>(r.src)); } |
| 84 | EXEC_DECL(cvtws) { vt_ref<short_word_t>(r.dest) = std::numeric_limits<short_word_t>::max() & vt_ref<word_t>(r.src); } | 98 | EXEC_DECL(cvtws) { vt_ref<short_word_t>(r.dest) = vt_ref<word_t>(r.src); } |
| 85 | EXEC_DECL(cvtsw) { vt_ref<word_t>(r.dest) = std::numeric_limits<short_word_t>::max() & vt_ref<short_word_t>(r.src); } | 99 | EXEC_DECL(cvtsw) { vt_ref<word_t>(r.dest) = vt_ref<short_word_t>(r.src); } |
| 86 | EXEC_DECL(cvtlf) { vt_ref<real_t>(r.dest) = static_cast<real_t>(vt_ref<big_t>(r.src)); } | 100 | EXEC_DECL(cvtlf) { vt_ref<real_t>(r.dest) = static_cast<real_t>(vt_ref<big_t>(r.src)); } |
| 87 | EXEC_DECL(cvtfl) | 101 | EXEC_DECL(cvtfl) |
| 88 | { | 102 | { |
| @@ -1626,7 +1640,7 @@ namespace · 1537 unmodified lines | |||
| 1626 | if (e->alloc_type == vm_string_t::type_desc()) | 1640 | if (e->alloc_type == vm_string_t::type_desc()) |
| 1627 | { | 1641 | { |
| 1628 | // String | 1642 | // String |
| 1629 | exception_id = dynamic_cast<vm_string_t *>(e); | 1643 | exception_id = static_cast<vm_string_t *>(e); |
| 1630 | 1644 | ||
| 1631 | if (debug::is_component_tracing_enabled<debug::component_trace_t::exception>()) | 1645 | if (debug::is_component_tracing_enabled<debug::component_trace_t::exception>()) |
| 1632 | debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "raise: string: >>%s<<\n", exception_id->str()); | 1646 | debug::log_msg(debug::component_trace_t::exception, debug::log_level_t::debug, "raise: string: >>%s<<\n", exception_id->str()); |