@@ -892,7 +892,7 @@ def _abs16(ins):
892892
893893
894894def _shru16 (ins ):
895- ''' Logical right shift 16bit unsigned integer.
895+ """ Logical right shift 16bit unsigned integer.
896896 The result is pushed onto the stack.
897897
898898 Optimizations:
@@ -901,7 +901,7 @@ def _shru16(ins):
901901
902902 * If 2nd op is 1
903903 Shift Right Arithmetic
904- '''
904+ """
905905 op1 , op2 = tuple (ins .quad [2 :])
906906 if is_int (op2 ):
907907 op = int16 (op2 )
@@ -922,16 +922,20 @@ def _shru16(ins):
922922 output .extend (_16bit_oper (op1 ))
923923
924924 label = tmp_label ()
925+ label2 = tmp_label ()
926+ output .append ('or a' )
927+ output .append ('jr z, %s' % label2 )
925928 output .append ('%s:' % label )
926929 output .append ('srl h' )
927930 output .append ('rr l' )
928931 output .append ('djnz %s' % label )
932+ output .append ('%s:' % label2 )
929933 output .append ('push hl' )
930934 return output
931935
932936
933937def _shri16 (ins ):
934- ''' Arithmetical right shift 16bit signed integer.
938+ """ Arithmetical right shift 16bit signed integer.
935939 The result is pushed onto the stack.
936940
937941 Optimizations:
@@ -940,7 +944,7 @@ def _shri16(ins):
940944
941945 * If 2nd op is 1
942946 Shift Right Arithmetic
943- '''
947+ """
944948 op1 , op2 = tuple (ins .quad [2 :])
945949 if is_int (op2 ):
946950 op = int16 (op2 )
@@ -961,16 +965,20 @@ def _shri16(ins):
961965 output .extend (_16bit_oper (op1 ))
962966
963967 label = tmp_label ()
968+ label2 = tmp_label ()
969+ output .append ('or a' )
970+ output .append ('jr z, %s' % label2 )
964971 output .append ('%s:' % label )
965972 output .append ('sra h' )
966973 output .append ('rr l' )
967974 output .append ('djnz %s' % label )
975+ output .append ('%s:' % label2 )
968976 output .append ('push hl' )
969977 return output
970978
971979
972980def _shl16 (ins ):
973- ''' Logical/aritmetical left shift 16bit (un)signed integer.
981+ """ Logical/aritmetical left shift 16bit (un)signed integer.
974982 The result is pushed onto the stack.
975983
976984 Optimizations:
@@ -979,7 +987,7 @@ def _shl16(ins):
979987
980988 * If 2nd op is lower than 6
981989 unroll lop
982- '''
990+ """
983991 op1 , op2 = tuple (ins .quad [2 :])
984992 if is_int (op2 ):
985993 op = int16 (op2 )
@@ -999,8 +1007,12 @@ def _shl16(ins):
9991007 output .extend (_16bit_oper (op1 ))
10001008
10011009 label = tmp_label ()
1010+ label2 = tmp_label ()
1011+ output .append ('or a' )
1012+ output .append ('jr z, %s' % label2 )
10021013 output .append ('%s:' % label )
10031014 output .append ('add hl, hl' )
10041015 output .append ('djnz %s' % label )
1016+ output .append ('%s:' % label2 )
10051017 output .append ('push hl' )
10061018 return output
0 commit comments