- COMMPAGE_DESCRIPTOR(bcopy_970,_COMM_PAGE_BCOPY,k64Bit+kHasAltivec,0,kCommPageMTCRF)
+
+// Very Big Copy Path. Save our return address in the stack for help decoding backtraces.
+// The conditions bigcopy expects are:
+// r0 = return address (also stored in caller's SF)
+// r4 = source ptr
+// r5 = length (at least several pages)
+// r12 = dest ptr
+
+LBigCopy:
+ lis r2,0x4000 // r2 <- 0x40000000
+ mflr r0 // get our return address
+ add. r2,r2,r2 // set cr0_lt if running in 32-bit mode
+ stw r0,8(r1) // save return, assuming 32-bit mode ("crsave" if 64-bit mode)
+ blta _COMM_PAGE_BIGCOPY // 32-bit mode, join big operand copy
+ std r0,16(r1) // save return in correct spot for 64-bit mode
+ ba _COMM_PAGE_BIGCOPY // then join big operand code
+
+
+ COMMPAGE_DESCRIPTOR(bcopy_970,_COMM_PAGE_BCOPY,k64Bit+kHasAltivec,0, \
+ kCommPageMTCRF+kCommPageBoth+kPort32to64)