Added support fun for long shifts
[fw/sdcc] / device / lib / z80 / shift.s
diff --git a/device/lib/z80/shift.s b/device/lib/z80/shift.s
new file mode 100644 (file)
index 0000000..e148568
--- /dev/null
@@ -0,0 +1,85 @@
+        ;;
+__rrulong_rr_s::                
+        ld      hl,#2+4
+        add     hl,sp
+                
+        ld      c,(hl)
+        dec     hl
+        ld      d,(hl)
+        dec     hl
+        ld      e,(hl)
+        dec     hl
+        ld      a,(hl)
+        dec     hl
+        ld      l,(hl)
+        ld      h,a
+
+        ld      a,c
+1$:
+        or      a,a
+        ret     z
+
+        rr      d
+        rr      e
+        rr      h
+        rr      l
+
+        dec     a
+        jp      1$
+
+__rrslong_rr_s::        
+        ld      hl,#2+4
+        add     hl,sp
+                
+        ld      c,(hl)
+        dec     hl
+        ld      d,(hl)
+        dec     hl
+        ld      e,(hl)
+        dec     hl
+        ld      a,(hl)
+        dec     hl
+        ld      l,(hl)
+        ld      h,a
+
+        ld      a,c
+1$:
+        or      a,a
+        ret     z
+
+        sra     d
+        rr      e
+        rr      h
+        rr      l
+
+        dec     a
+        jp      1$
+        
+__rlslong_rr_s::                
+__rlulong_rr_s::                
+        ld      hl,#2+4
+        add     hl,sp
+        
+        ld      c,(hl)
+        dec     hl
+        ld      d,(hl)
+        dec     hl
+        ld      e,(hl)
+        dec     hl
+        ld      a,(hl)
+        dec     hl
+        ld      l,(hl)
+        ld      h,a
+
+        ld      a,c
+1$:
+        or      a,a
+        ret     z
+
+        rl      l
+        rl      h
+        rl      e
+        rl      d
+
+        dec     a        
+        jp      1$