-ENTRY(addupc)
- movl a2,sp@- | scratch register
- movl sp@(12),a2 | get &u.u_prof
- movl sp@(8),d0 | get user pc
- subl a2@(8),d0 | pc -= pr->pr_off
- jlt Lauexit | less than 0, skip it
- movl a2@(12),d1 | get pr->pr_scale
- lsrl #1,d0 | pc /= 2
- lsrl #1,d1 | scale /= 2
- mulul d1,d0 | pc /= scale
- moveq #14,d1
- lsrl d1,d0 | pc >>= 14
- bclr #0,d0 | pc &= ~1
- cmpl a2@(4),d0 | too big for buffer?
- jge Lauexit | yes, screw it
- addl a2@,d0 | no, add base
- movl d0,sp@- | push address
- jbsr _fusword | grab old value
- movl sp@+,a0 | grab address back
- cmpl #-1,d0 | access ok
- jeq Lauerror | no, skip out
- addw sp@(18),d0 | add tick to current value
- movl d0,sp@- | push value
- movl a0,sp@- | push address
- jbsr _susword | write back new value
- addql #8,sp | pop params
- tstl d0 | fault?
- jeq Lauexit | no, all done
-Lauerror:
- clrl a2@(12) | clear scale (turn off prof)
-Lauexit:
- movl sp@+,a2 | restore scratch reg
+ENTRY(__main)
+ rts
+
+/*
+ * copypage(fromaddr, toaddr)
+ *
+ * Optimized version of bcopy for a single page-aligned NBPG byte copy.
+ */
+ENTRY(copypage)
+ movl sp@(4),a0 | source address
+ movl sp@(8),a1 | destination address
+ movl #NBPG/32,d0 | number of 32 byte chunks
+#if defined(HP380)
+ cmpl #-2,_mmutype | 68040?
+ jne Lmlloop | no, use movl
+Lm16loop:
+ .long 0xf6209000 | move16 a0@+,a1@+
+ .long 0xf6209000 | move16 a0@+,a1@+
+ subql #1,d0
+ jne Lm16loop
+ rts
+#endif
+Lmlloop:
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ movl a0@+,a1@+
+ subql #1,d0
+ jne Lmlloop