@@ -946,14 +946,26 @@ namespace basecode::vm {
946
946
register_type_t ::integer :
947
947
register_type_t ::floating_point;
948
948
949
- auto range = static_cast <uint16_t >(operand.value .u );
950
- auto start = (range >> 8 ) & 0xff ;
951
- auto end = range & 0xff ;
952
- auto delta = end < start ? -1 : 1 ;
953
- auto count = std::abs (end - start);
954
-
955
- for (uint8_t reg = static_cast <uint8_t >(start); count >= 0 ; reg += delta, --count) {
956
- auto reg_index = register_index (static_cast <registers_t >(reg), type);
949
+ if (operand.is_range ()) {
950
+ auto range = static_cast <uint16_t >(operand.value .u );
951
+ auto start = (range >> 8 ) & 0xff ;
952
+ auto end = range & 0xff ;
953
+ auto delta = end < start ? -1 : 1 ;
954
+ auto count = std::abs (end - start);
955
+
956
+ for (auto reg = static_cast <uint8_t >(start);
957
+ count >= 0 ;
958
+ reg += delta, --count) {
959
+ auto reg_index = register_index (
960
+ static_cast <registers_t >(reg),
961
+ type);
962
+ auto alias = _registers.r [reg_index];
963
+ push (alias.qw );
964
+ }
965
+ } else if (operand.is_reg ()) {
966
+ auto reg_index = register_index (
967
+ static_cast <registers_t >(operand.value .r ),
968
+ type);
957
969
auto alias = _registers.r [reg_index];
958
970
push (alias.qw );
959
971
}
@@ -991,14 +1003,25 @@ namespace basecode::vm {
991
1003
register_type_t ::integer :
992
1004
register_type_t ::floating_point;
993
1005
994
- auto range = static_cast <uint16_t >(operand.value .u );
995
- auto start = (range >> 8 ) & 0xff ;
996
- auto end = range & 0xff ;
997
- auto delta = end < start ? -1 : 1 ;
998
- auto count = std::abs (end - start);
999
-
1000
- for (uint8_t reg = static_cast <uint8_t >(start); count >= 0 ; reg += delta, --count) {
1001
- auto reg_index = register_index (static_cast <registers_t >(reg), type);
1006
+ if (operand.is_range ()) {
1007
+ auto range = static_cast <uint16_t >(operand.value .u );
1008
+ auto start = (range >> 8 ) & 0xff ;
1009
+ auto end = range & 0xff ;
1010
+ auto delta = end < start ? -1 : 1 ;
1011
+ auto count = std::abs (end - start);
1012
+
1013
+ for (auto reg = static_cast <uint8_t >(start);
1014
+ count >= 0 ;
1015
+ reg += delta, --count) {
1016
+ auto reg_index = register_index (
1017
+ static_cast <registers_t >(reg),
1018
+ type);
1019
+ _registers.r [reg_index].qw = pop ();
1020
+ }
1021
+ } else if (operand.is_reg ()) {
1022
+ auto reg_index = register_index (
1023
+ static_cast <registers_t >(operand.value .r ),
1024
+ type);
1002
1025
_registers.r [reg_index].qw = pop ();
1003
1026
}
1004
1027
}
0 commit comments