diff --git a/Hercules_VS2008.vcproj b/Hercules_VS2008.vcproj
index 1ac47f47e..1fe33cf1c 100644
--- a/Hercules_VS2008.vcproj
+++ b/Hercules_VS2008.vcproj
@@ -3442,6 +3442,14 @@
RelativePath=".\tests\cpu0off.core"
>
+
+
+
+
@@ -4481,6 +4489,14 @@
RelativePath=".\tests\csxtr.tst"
>
+
+
+
+
@@ -4901,6 +4917,14 @@
RelativePath=".\tests\CMPSC.asm"
>
+
+
+
+
@@ -5292,6 +5316,22 @@
RelativePath=".\tests\CMPSC.pdf"
>
+
+
+
+
+
+
+
+
diff --git a/Hercules_VS2015.vcxproj b/Hercules_VS2015.vcxproj
index ef4ea403a..9baacfc7b 100644
--- a/Hercules_VS2015.vcxproj
+++ b/Hercules_VS2015.vcxproj
@@ -930,6 +930,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Hercules_VS2015.vcxproj.filters b/Hercules_VS2015.vcxproj.filters
index bce2a2875..c344124ce 100644
--- a/Hercules_VS2015.vcxproj.filters
+++ b/Hercules_VS2015.vcxproj.filters
@@ -1715,6 +1715,12 @@
Other Files\tests\core
+
+ Other Files\tests\core
+
+
+ Other Files\tests\core
+
Other Files\tests\core
@@ -2018,6 +2024,12 @@
Other Files\tests\scripts\tst
+
+ Other Files\tests\scripts\tst
+
+
+ Other Files\tests\scripts\tst
+
Other Files\tests\scripts\tst
@@ -2264,6 +2276,12 @@
Other Files\tests\scripts\asm
+
+ Other Files\tests\scripts\asm
+
+
+ Other Files\tests\scripts\asm
+
Other Files\tests\scripts\asm
@@ -2468,6 +2486,18 @@
Other Files\tests\scripts\asm\list
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
Other Files\tests\scripts\asm\list
diff --git a/Hercules_VS2017.vcxproj b/Hercules_VS2017.vcxproj
index 30f775d49..ab76e41c3 100644
--- a/Hercules_VS2017.vcxproj
+++ b/Hercules_VS2017.vcxproj
@@ -930,6 +930,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Hercules_VS2017.vcxproj.filters b/Hercules_VS2017.vcxproj.filters
index bce2a2875..c344124ce 100644
--- a/Hercules_VS2017.vcxproj.filters
+++ b/Hercules_VS2017.vcxproj.filters
@@ -1715,6 +1715,12 @@
Other Files\tests\core
+
+ Other Files\tests\core
+
+
+ Other Files\tests\core
+
Other Files\tests\core
@@ -2018,6 +2024,12 @@
Other Files\tests\scripts\tst
+
+ Other Files\tests\scripts\tst
+
+
+ Other Files\tests\scripts\tst
+
Other Files\tests\scripts\tst
@@ -2264,6 +2276,12 @@
Other Files\tests\scripts\asm
+
+ Other Files\tests\scripts\asm
+
+
+ Other Files\tests\scripts\asm
+
Other Files\tests\scripts\asm
@@ -2468,6 +2486,18 @@
Other Files\tests\scripts\asm\list
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
Other Files\tests\scripts\asm\list
diff --git a/Hercules_VS2019.vcxproj b/Hercules_VS2019.vcxproj
index f7c8fdf29..c73bfb4ef 100644
--- a/Hercules_VS2019.vcxproj
+++ b/Hercules_VS2019.vcxproj
@@ -930,6 +930,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Hercules_VS2019.vcxproj.filters b/Hercules_VS2019.vcxproj.filters
index bce2a2875..c344124ce 100644
--- a/Hercules_VS2019.vcxproj.filters
+++ b/Hercules_VS2019.vcxproj.filters
@@ -1715,6 +1715,12 @@
Other Files\tests\core
+
+ Other Files\tests\core
+
+
+ Other Files\tests\core
+
Other Files\tests\core
@@ -2018,6 +2024,12 @@
Other Files\tests\scripts\tst
+
+ Other Files\tests\scripts\tst
+
+
+ Other Files\tests\scripts\tst
+
Other Files\tests\scripts\tst
@@ -2264,6 +2276,12 @@
Other Files\tests\scripts\asm
+
+ Other Files\tests\scripts\asm
+
+
+ Other Files\tests\scripts\asm
+
Other Files\tests\scripts\asm
@@ -2468,6 +2486,18 @@
Other Files\tests\scripts\asm\list
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
Other Files\tests\scripts\asm\list
diff --git a/Hercules_VS2022.vcxproj b/Hercules_VS2022.vcxproj
index 1015fd2f4..eb2f65574 100644
--- a/Hercules_VS2022.vcxproj
+++ b/Hercules_VS2022.vcxproj
@@ -930,6 +930,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Hercules_VS2022.vcxproj.filters b/Hercules_VS2022.vcxproj.filters
index bce2a2875..c344124ce 100644
--- a/Hercules_VS2022.vcxproj.filters
+++ b/Hercules_VS2022.vcxproj.filters
@@ -1715,6 +1715,12 @@
Other Files\tests\core
+
+ Other Files\tests\core
+
+
+ Other Files\tests\core
+
Other Files\tests\core
@@ -2018,6 +2024,12 @@
Other Files\tests\scripts\tst
+
+ Other Files\tests\scripts\tst
+
+
+ Other Files\tests\scripts\tst
+
Other Files\tests\scripts\tst
@@ -2264,6 +2276,12 @@
Other Files\tests\scripts\asm
+
+ Other Files\tests\scripts\asm
+
+
+ Other Files\tests\scripts\asm
+
Other Files\tests\scripts\asm
@@ -2468,6 +2486,18 @@
Other Files\tests\scripts\asm\list
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
+
+ Other Files\tests\scripts\asm\list
+
Other Files\tests\scripts\asm\list
diff --git a/general1.c b/general1.c
index f246ad602..7335f4e66 100644
--- a/general1.c
+++ b/general1.c
@@ -3898,22 +3898,380 @@ BYTE termchar; /* Terminating character */
#if defined( FEATURE_STRING_INSTRUCTION )
+
+#undef CUSE_DEBUG
+#define CUSE_DEBUG ( 0 )
+
+#undef MEM_CMP_NPOS
+#define MEM_CMP_NPOS ( -1 )
+
+#undef PAGEBYTES
+#define PAGEBYTES( _ea ) (PAGEFRAME_PAGESIZE - ((_ea) & PAGEFRAME_BYTEMASK))
+
+#undef MAINSTOR_PAGEBASE
+#define MAINSTOR_PAGEBASE( _ma ) ((BYTE*) ((uintptr_t) ( _ma ) & PAGEFRAME_PAGEMASK))
+
+/*-------------------------------------------------------------------*/
+/* mem_cmp_first_equ -- compare memory for first equal byte */
+/*-------------------------------------------------------------------*/
+/* Input: */
+/* regs CPU register context */
+/* ea1 Logical address of leftmost byte of operand-1 */
+/* b1 Operand-1 base register */
+/* ea2 Logical address of leftmost byte of operand-2 */
+/* b2 Operand-2 base register */
+/* len Compare length */
+/* Output: */
+/* rc MEM_CMP_NPOS : no equ byte */
+/* 0 to (len-1) : index of equ byte */
+/* */
+/*-------------------------------------------------------------------*/
+int ARCH_DEP( mem_cmp_first_equ )
+(
+ REGS* regs, // register context
+ VADR ea1, int b1, // op-1 (dst)
+ VADR ea2, int b2, // op-2 (src)
+ U32 len // compare length
+)
+{
+ BYTE *m1, *m2; // operand mainstor addresses
+ BYTE *m1pg, *m2pg; // operand page
+ U32 i; // loop index
+
+ /* fast exit */
+ if (len == 0) return MEM_CMP_NPOS;
+
+ // Translate left most byte of each operand
+ m1 = MADDRL(ea1 & ADDRESS_MAXWRAP( regs ), PAGEBYTES( ea1 ), b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2 = MADDRL(ea2 & ADDRESS_MAXWRAP( regs ), PAGEBYTES( ea2 ), b2, regs, ACCTYPE_READ, regs->psw.pkey );
+
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+
+ for (i = 0; i < len ; i++)
+ {
+ /* compare bytes */
+ if (*m1 == *m2)
+ return i;
+
+ /* update mainstore addresses */
+ m1++;
+ m2++;
+
+ /* check for page cross */
+ if (MAINSTOR_PAGEBASE ( m1 ) != m1pg)
+ {
+ m1 = MADDRL((ea1 + (i+1)) & ADDRESS_MAXWRAP( regs ), PAGEFRAME_PAGESIZE, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ }
+ if (MAINSTOR_PAGEBASE ( m2 ) != m2pg)
+ {
+ m2 = MADDRL((ea2 + (i+1)) & ADDRESS_MAXWRAP( regs ), PAGEFRAME_PAGESIZE, b2, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+ }
+ }
+
+ /* no equ byte in memory */
+ return MEM_CMP_NPOS;
+
+} /* end ARCH_DEP( mem_cmp_first_equ ) */
+
+/*-------------------------------------------------------------------*/
+/* mem_cmp_first_substr - compare memory for first possible substring*/
+/* */
+/* Possile substrings are searched right to left to find the */
+/* rightmost non-equal byte. The next byte establishes the next */
+/* possible substring starting position for comparison. */
+/*-------------------------------------------------------------------*/
+/* Input: */
+/* regs CPU register context */
+/* ea1 Logical address of leftmost byte of operand-1 */
+/* b1 Operand-1 base register */
+/* ea2 Logical address of leftmost byte of operand-2 */
+/* b2 Operand-2 base register */
+/* len Compare length */
+/* sublen Substring length */
+/* *equlen possile substring length (if requested) */
+/* Output: */
+/* rc MEM_CMP_NPOS : no equ byte */
+/* 0 to (len-1) : index of first possible substring */
+/* */
+/*-------------------------------------------------------------------*/
+int ARCH_DEP( mem_cmp_first_substr )
+(
+ REGS* regs, // register context
+ VADR ea1, int b1, // op-1 (dst)
+ VADR ea2, int b2, // op-2 (src)
+ int len, // compare length
+ int sublen, // substring length
+ int* equlen // # of equal bytes
+)
+{
+ BYTE *m1, *m2; // operand mainstor addresses
+ BYTE *m1pg, *m2pg; // operand page
+
+ int ss_index=0; // possible substring index
+ int ss_scan_index=0; // substring scan index
+ int ss_scan_work; // substring scan length
+ int ss_equ_len; // substring equal length
+
+ /* Is caller interested in equality length? */
+ if (equlen)
+ *equlen = 0;
+
+ /* fast exits */
+ if (len <= 0) return MEM_CMP_NPOS;
+ if (sublen <= 0) return MEM_CMP_NPOS;
+
+ /* operand mainstore addresses */
+ m1 = MADDRL(ea1, PAGEBYTES( ea1 ), b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2 = MADDRL(ea2, PAGEBYTES( ea2 ), b2, regs, ACCTYPE_READ, regs->psw.pkey );
+
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+
+ for (ss_index = 0; ss_index < len; ss_index = ( ss_scan_index +1 ) )
+ {
+ /* reset candidate substring length */
+ ss_equ_len = 0;
+
+ /* righttmost byte of candidate substring */
+ ss_scan_index = min( ss_index + (sublen-1), (len-1));
+ ss_scan_work = ss_scan_index - ss_index;
+
+#if CUSE_DEBUG
+ logmsg("CUSE: MEM_CMP_FIRST_SUBSTR outer: len=%d, sublen=%d, scan_ss_index=%d, ss_index=%d, ss_equ_len=%d, ea1+idx=%X , m1=%p, ea2+idx=%X, m2=%p \n",
+ len, sublen, ss_scan_index, ss_index, ss_equ_len, ea1+ss_scan_index, m1, ea2+ss_scan_index, m2);
+#endif
+ /* operand candidate substring rightmost mainstore address */
+ m1 += ss_scan_work;
+ m2 += ss_scan_work;
+
+ /* check for page cross */
+ if (MAINSTOR_PAGEBASE ( m1 ) != m1pg)
+ {
+ m1 = MADDRL((ea1 + ss_scan_index) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ }
+ if (MAINSTOR_PAGEBASE ( m2 ) != m2pg)
+ {
+ m2 = MADDRL((ea2 + ss_scan_index) & ADDRESS_MAXWRAP( regs ), 1, b2, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+ }
+
+ /* check candidate substring - right to left */
+ for ( ; ss_scan_index >= ss_index ; ss_scan_index-- )
+ {
+#if CUSE_DEBUG
+ logmsg("CUSE: MEM_CMP_FIRST_SUBSTR inner: len=%d, sublen=%d, scan_ss_index=%d, ss_index=%d, ss_equ_len=%d, m1=%p, m2=%p \n",
+ len, sublen, ss_scan_index, ss_index, ss_equ_len, m1, m2);
+#endif
+ /* compare bytes */
+ if (*m1 != *m2)
+ break;
+
+ /* update partial substring length */
+ ss_equ_len++;
+
+ /* update mainstore addresses */
+ m1--;
+ m2--;
+
+ /* check for page cross */
+ if (MAINSTOR_PAGEBASE ( m1 ) != m1pg)
+ {
+ m1 = MADDRL((ea1 + (ss_scan_index-1)) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ }
+ if (MAINSTOR_PAGEBASE ( m2 ) != m2pg)
+ {
+ m2 = MADDRL((ea2 + (ss_scan_index-1)) & ADDRESS_MAXWRAP( regs ), 1, b2, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+ }
+ } /* end check candidate substring - right to left */
+
+ /* Is caller interested in equality length? */
+ if (equlen)
+ *equlen = ss_equ_len;
+
+ /* substring found? */
+ if ( ss_scan_index < ss_index ) return ss_index;
+
+ /* last possible substring extends beyond length? */
+ if ( ss_equ_len > 0 && ss_index + sublen >= len) return ss_scan_index +1;
+
+ /* update mainstore addresses to next byte */
+ m1++;
+ m2++;
+
+ /* check for page cross */
+ if (MAINSTOR_PAGEBASE ( m1 ) != m1pg)
+ {
+ m1 = MADDRL((ea1 + (ss_scan_index +1)) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ }
+ if (MAINSTOR_PAGEBASE ( m2 ) != m2pg)
+ {
+ m2 = MADDRL((ea2 + (ss_scan_index +1)) & ADDRESS_MAXWRAP( regs ), 1, b2, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+ }
+ } /* end check for substring */
+
+ /* no substring; no equal bytes found */
+ /* Is caller interested in equality length? */
+ if (equlen)
+ *equlen = 0;
+
+ return MEM_CMP_NPOS;
+
+} /* end ARCH_DEP( mem_cmp_first_substr ) */
+
+/*-------------------------------------------------------------------*/
+/* mem_cmp_last_neq -- compare memory for last neq byte */
+/*-------------------------------------------------------------------*/
+/* Input: */
+/* regs CPU register context */
+/* ea1 Logical address of leftmost byte of operand-1 */
+/* b1 Operand-1 base register */
+/* ea2 Logical address of leftmost byte of operand-2 */
+/* b2 Operand-2 base register */
+/* len Compare length */
+/* Output: */
+/* rc MEM_CMP_NPOS : no neq byte (memory is equal) */
+/* 0 to (len-1) : index of neq byte */
+/* */
+/*-------------------------------------------------------------------*/
+int ARCH_DEP( mem_cmp_last_neq )
+(
+ REGS* regs, // register context
+ VADR ea1, int b1, // op-1 (dst)
+ VADR ea2, int b2, // op-2 (src)
+ int len // compare length
+)
+{
+ BYTE *m1, *m2; // operand mainstor addresses
+ BYTE *m1pg, *m2pg; // operand page
+ int i; // loop index
+
+ /* fast exit */
+ if (len <= 0) return MEM_CMP_NPOS;
+
+ // Translate righttmost byte of each operand
+ m1 = MADDRL((ea1 + (len-1)) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2 = MADDRL((ea2 + (len-1)) & ADDRESS_MAXWRAP( regs ), 1, b2, regs, ACCTYPE_READ, regs->psw.pkey );
+
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+
+ for (i = (len-1); i >= 0 ; i--)
+ {
+ /* compare bytes */
+ if (*m1 != *m2)
+ return i;
+
+ /* update mainstore addresses */
+ m1--;
+ m2--;
+
+ /* check for page cross */
+ if (MAINSTOR_PAGEBASE ( m1 ) != m1pg)
+ {
+ m1 = MADDRL((ea1 + (i-1)) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ }
+ if (MAINSTOR_PAGEBASE ( m2 ) != m2pg)
+ {
+ m2 = MADDRL((ea2 + (i-1)) & ADDRESS_MAXWRAP( regs ), 1, b2, regs, ACCTYPE_READ, regs->psw.pkey );
+ m2pg = MAINSTOR_PAGEBASE ( m2 );
+ }
+ }
+
+ /* no neq bytes; memory is equal */
+ return MEM_CMP_NPOS;
+
+} /* end ARCH_DEP( mem_cmp_last_neq ) */
+
+/*-------------------------------------------------------------------*/
+/* mem_pad_cmp_last_neq -- compare memory to pad for last neq byte */
+/*-------------------------------------------------------------------*/
+/* Input: */
+/* regs CPU register context */
+/* ea1 Logical address of leftmost byte of operand-1 */
+/* b1 Operand-1 base register */
+/* pad Padding byte */
+/* len Compare length */
+/* Output: */
+/* rc MEM_CMP_NPOS : no neq byte (memory is equal to pad) */
+/* 0 to (len-1) : index of neq byte */
+/* */
+/*-------------------------------------------------------------------*/
+int ARCH_DEP( mem_pad_cmp_last_neq )
+(
+ REGS* regs, // register context
+ VADR ea1, int b1, // op-1 (dst)
+ const BYTE pad, // pad byte
+ int len // compare length
+)
+{
+ BYTE *m1; // operand mainstor addresses
+ BYTE *m1pg; // operand page
+ int i; // loop index
+
+ if (len <= 0) return MEM_CMP_NPOS;
+
+ // Translate righttmost byte of operand
+ m1 = MADDRL((ea1 + (len-1)) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+
+ for (i = (len-1); i >= 0 ; i--)
+ {
+ /* compare byte to pad */
+ if (*m1 != pad)
+ return i;
+
+ /* update mainstore address */
+ m1--;
+
+ /* check for page cross */
+ if (MAINSTOR_PAGEBASE ( m1 ) != m1pg)
+ {
+ m1 = MADDRL((ea1 + (i-1)) & ADDRESS_MAXWRAP( regs ), 1, b1, regs, ACCTYPE_READ, regs->psw.pkey );
+ m1pg = MAINSTOR_PAGEBASE ( m1 );
+ }
+ }
+
+ /* no neq bytes; memory is equal to pad */
+ return MEM_CMP_NPOS;
+
+} /* end ARCH_DEP( mem_pad_cmp_last_neq ) */
+
/*-------------------------------------------------------------------*/
/* B257 CUSE - Compare Until Substring Equal [RRE] */
/*-------------------------------------------------------------------*/
+#undef CUSE_MAX
+#define CUSE_MAX _4K
+
DEF_INST( compare_until_substring_equal )
{
-int r1, r2; /* Values of R fields */
-int i; /* Loop counter */
-int cc = 0; /* Condition code */
-VADR addr1, addr2; /* Operand addresses */
-VADR eqaddr1, eqaddr2; /* Address of equal substring*/
-S64 len1, len2; /* Operand lengths */
-S64 remlen1, remlen2; /* Lengths remaining */
-BYTE byte1, byte2; /* Operand bytes */
-BYTE pad; /* Padding byte */
-BYTE sublen; /* Substring length */
-BYTE equlen = 0; /* Equal byte counter */
+ int r1, r2; // Values of R fields
+ int i; // Loop counter
+ int cc = 0; // Condition code
+ VADR addr1, addr2; // Operand addresses
+ VADR eqaddr1, eqaddr2; // Address of equal substring
+ S64 len1, len2; // Operand lengths
+ S64 remlen1, remlen2; // Lengths remaining
+ BYTE byte1, byte2; // Operand bytes
+ BYTE pad; // Padding byte
+ BYTE sublen; // Substring length
+ BYTE equlen = 0; // Equal byte counter
+
+ int peeklen; // Operand look ahead length
+ int scanlen; // scan length
+ int padlen; // Operand pad length
+ int lastneq; // mem_cmp_last_neq return
+ int firstequ; // mem_cmp_first_equ return
+ int rc; // work - return code
+ U32 idx =0; // mem_cmp() - index
RRE( inst, regs, r1, r2 );
PER_ZEROADDR_LCHECK2( regs, r1, r1+1, r2, r2+1 );
@@ -3969,17 +4327,359 @@ BYTE equlen = 0; /* Equal byte counter */
/* Process operands from left to right */
for (i=0; len1 > 0 || len2 > 0 ; i++)
{
-#undef CUSE_MAX
-#define CUSE_MAX _4K
-
- /* If 4096 bytes have been compared, and the last bytes
- compared were unequal, exit with condition code 3 */
- if (equlen == 0 && i >= CUSE_MAX)
+#if CUSE_DEBUG
+ logmsg("CUSE: addr1=%X, len1=%ld, addr2=%X, len2=%ld, equlen=%ld, eqaddr1=%X, remlen1=%ld, eqaddr2=%X, remlen2=%ld, i=%d \n",
+ addr1, len1, addr2, len2, equlen, eqaddr1, remlen1, eqaddr2, remlen2, i);
+#endif
+ /* If equal byte count has reached substring length
+ exit with condition code zero */
+ if (equlen == sublen)
{
- cc = 3;
+ cc = 0;
break;
}
+ /* interrupt and cc=3 checks: last comparision was unequal */
+ if ( equlen == 0 )
+ {
+ /* If 4096 bytes have been compared, and the last bytes
+ compared were unequal, exit with condition code 3 */
+ if (i >= CUSE_MAX)
+ {
+ cc = 3;
+ break;
+ }
+ }
+
+ /* ---------------------------- */
+ /* Special Cases Optimizations */
+ /* ---------------------------- */
+
+ /* ---------------------------------- */
+ /* Special case: substring length = 1 */
+ /* ---------------------------------- */
+ if (sublen == 1 )
+ {
+ scanlen = min ( len1, len2 );
+ firstequ = ARCH_DEP( mem_cmp_first_equ )( regs, addr1, r1, addr2, r2, scanlen);
+
+#if CUSE_DEBUG
+ logmsg("CUSE: mem_cmp_first_equ: addr1=%X, addr2=%X, scanlen=%d, firstequ=%d \n",
+ addr1, addr2, scanlen, firstequ);
+#endif
+ if (firstequ == MEM_CMP_NPOS)
+ {
+ /* no matching byte */
+ addr1 += scanlen;
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= scanlen;
+
+ addr2 += scanlen;
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= scanlen;
+
+ /* update bytes compared for cc=3 check */
+ i += scanlen;
+
+ equlen = 0;
+ cc = 2;
+ continue;
+ }
+ else
+ {
+ /* found a matching byte */
+ addr1 += firstequ;
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= firstequ;
+
+ addr2 += firstequ;
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= firstequ;
+
+ /* Update equal string addresses and lengths */
+ eqaddr1 = addr1;
+ eqaddr2 = addr2;
+ remlen1 = len1;
+ remlen2 = len2;
+
+ equlen = 1;
+ cc = 0;
+ continue;
+ }
+ } /* end Special case: substring length = 1 */
+
+ /* --------------------------------------------------- */
+ /* Special case: partial substring found */
+ /* - continue compare */
+ /* --------------------------------------------------- */
+ if (equlen > 0 && len1 > 0 && len2 > 0)
+ {
+ scanlen = min (sublen - equlen, min( len1, len2) );
+ rc = ARCH_DEP( mem_cmp ) (regs, addr1, r1, addr2, r2, scanlen, &idx);
+
+#if CUSE_DEBUG
+ logmsg("CUSE: mem_cmp: addr1=%X, addr2=%X, scanlen=%d, sublen=%d, rc=%d, idx=%u \n",
+ addr1, addr2, scanlen, sublen, rc, idx);
+#endif
+ if (rc == 0)
+ {
+ /* larger partial substring found - may need pad to complete */
+ addr1 += scanlen;
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= scanlen;
+
+ addr2 += scanlen;
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= scanlen;
+
+ equlen += scanlen;
+
+ /* update bytes compared for cc=3 check */
+ i += scanlen;
+
+ cc = ( sublen == equlen ) ? 0 : 1;
+ continue;
+ }
+ else
+ {
+ /* substring not found */
+ /* update to nonequal byte */
+ addr1 += (idx +1);
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= (idx +1);
+
+ addr2 += (idx +1);
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= (idx +1);
+
+ equlen = 0;
+
+ /* update bytes compared for cc=3 check */
+ i += (idx +1);
+
+ cc = 2;
+ continue;
+ }
+ } /* end Special case: partial substring found */
+
+ /* ----------------------------------------------------------------------- */
+ /* Special case: no partial substring - scan for first possible substring */
+ /* ----------------------------------------------------------------------- */
+ scanlen = min( len1, len2 );
+ if (equlen == 0 && scanlen > sublen)
+ {
+ int ss_len = 0;
+ firstequ = ARCH_DEP( mem_cmp_first_substr )( regs, addr1, r1, addr2, r2, scanlen, sublen, &ss_len);
+
+#if CUSE_DEBUG
+ logmsg("CUSE: mem_cmp_first_substr: addr1=%X, addr2=%X, scanlen=%d, sublen=%d, firstequ=%d, ss_len=%d \n",
+ addr1, addr2, scanlen, sublen, firstequ, ss_len);
+#endif
+ if (firstequ == MEM_CMP_NPOS)
+ {
+ /* no possible substring found - update to next end of scanned memory */
+ addr1 += scanlen ;
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= scanlen;
+
+ addr2 += scanlen;
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= scanlen;
+
+ /* update bytes compared for cc=3 check */
+ i += scanlen;
+
+ /* save the start of possible substring addresses and remaining lengths */
+ eqaddr1 = addr1;
+ eqaddr2 = addr2;
+ remlen1 = len1;
+ remlen2 = len2;
+ equlen = 0;
+
+ cc = 2;
+ }
+ else
+ {
+ /* found a start of possible substring byte */
+
+ /* save the start of possible substring addresses and remaining lengths */
+ eqaddr1 = addr1 + firstequ;
+ eqaddr2 = addr2 + firstequ;
+ remlen1 = len1 - firstequ;
+ remlen2 = len2 - firstequ;
+ equlen = ss_len;
+
+ /* update address and length to next byte */
+ addr1 += (firstequ + ss_len);
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= (firstequ + ss_len);
+
+ addr2 += (firstequ + ss_len);
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= (firstequ + ss_len);
+
+ /* update bytes compared for cc=3 check */
+ i += (firstequ + ss_len);
+
+ cc = ( sublen == equlen ) ? 0 : 1;
+ }
+ continue;
+
+ } /*end Special case: no partial substring - scan for first possible substring */
+
+ /* ------------------------------------------------------------------- */
+ /* Special case: scan substring right to left */
+ /* ------------------------------------------------------------------- */
+ /* Peek look ahead at last non-pad byte of candidate substring */
+ peeklen = min( sublen - equlen, min ( len1, len2 ) );
+ if (peeklen > 1)
+ {
+ lastneq = ARCH_DEP( mem_cmp_last_neq )( regs, addr1, r1, addr2, r2, peeklen);
+
+#if CUSE_DEBUG
+ logmsg("CUSE: mem_cmp_last_neq: addr1=%X, addr2=%X, peaklen=%d, lastneq=%d \n",
+ addr1, addr2, peeklen, lastneq);
+#endif
+ if (lastneq == MEM_CMP_NPOS)
+ {
+ if (sublen == peeklen + equlen)
+ {
+ /* complete substring found */
+ cc = 0;
+ break;
+ }
+ else
+ {
+ /* partial substring found - possibly need padding */
+ addr1 += peeklen;
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= peeklen;
+
+ addr2 += peeklen;
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= peeklen;
+
+ /* update bytes compared for cc=3 check */
+ i += peeklen;
+
+ equlen += peeklen;
+ cc = 1;
+ continue;
+ }
+ }
+ else
+ {
+ /* found a mismatch - update to nonequal byte */
+ addr1 += (lastneq +1);
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= (lastneq +1);
+
+ addr2 += (lastneq +1);
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= (lastneq +1);
+
+ /* update bytes compared for cc=3 check */
+ i += (lastneq +1);
+
+ equlen = 0;
+ cc = 2;
+ continue;
+ }
+ } /* end Special case: scan substring right to left */
+
+ /* -------------------------------------------------------------- */
+ /* Special case: only have operand-1. only padding check required */
+ /* -------------------------------------------------------------- */
+ if ( len1 > 0 && len2 == 0)
+ {
+ padlen = min( len1, (sublen - equlen));
+ lastneq = ARCH_DEP( mem_pad_cmp_last_neq )( regs, addr1, r1, pad, padlen );
+
+#if CUSE_DEBUG
+ logmsg("CUSE: op-1 pad check: addr1=%X, len1=%ld, padlen=%d, eqaddr1=%X, equlen=%d, remlen1=%d, lastneq=%d \n",
+ addr1, len1, padlen, eqaddr1, equlen, remlen1, lastneq );
+#endif
+ if (lastneq == MEM_CMP_NPOS)
+ {
+ addr1 += padlen;
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= padlen;
+
+ equlen += padlen;
+
+ cc = (sublen == equlen ) ? 0 : 1;
+ break;
+ }
+ else
+ {
+ /* found a mismatch - update to nonequal byte */
+ addr1 += (lastneq +1);
+ addr1 &= ADDRESS_MAXWRAP( regs );
+ len1 -= (lastneq +1);
+
+ /* update bytes compared for cc=3 check */
+ i += (lastneq +1);
+
+ eqaddr1 = addr1;
+ remlen1 = len1;
+
+ equlen = 0;
+ cc = 2;
+ continue;
+ }
+ } /* end Special case: only have operand-1. only padding check required */
+
+ /* -------------------------------------------------------------- */
+ /* Special case: only have operand-2. only padding check required */
+ /* -------------------------------------------------------------- */
+ if ( len1 == 0 && len2 > 0)
+ {
+ padlen = min( len2, (sublen - equlen));
+ lastneq = ARCH_DEP( mem_pad_cmp_last_neq )( regs, addr2, r2, pad, padlen );
+
+#if CUSE_DEBUG
+ logmsg("CUSE: op-2 pad check: addr2=%X, len2=%ld, padlen=%d, eqaddr2=%X, equlen=%d, remlen2=%d, lastneq=%d \n",
+ addr2, len2, padlen, eqaddr2, equlen, remlen2, lastneq );
+#endif
+ if (lastneq == MEM_CMP_NPOS)
+ {
+ addr2 += padlen;
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= padlen;
+
+ equlen += padlen;
+
+ cc = (sublen == equlen ) ? 0 : 1;
+ break;
+ }
+ else
+ {
+ /* found a mismatch - update to nonequal byte */
+ addr2 += (lastneq +1);
+ addr2 &= ADDRESS_MAXWRAP( regs );
+ len2 -= (lastneq +1);
+
+ /* update bytes compared for cc=3 check */
+ i += (lastneq +1);
+
+ eqaddr2 = addr2;
+ remlen2 = len2;
+
+ equlen = 0;
+ cc = 2;
+ continue;
+ }
+ } /* Special case: only have operand-2. only padding check required */
+
+ /* ------------------------------------------------------- */
+ /* General case: */
+ /* Scan left to right byte by byte */
+ /* ------------------------------------------------------- */
+
+#if CUSE_DEBUG
+ logmsg("CUSE: general: addr1=%X, len1=%ld, addr2=%X, len2=%ld, equlen=%d \n",
+ addr1, len1, addr2, len2, equlen);
+#endif
/* Fetch byte from first operand, or use padding byte */
if (len1 > 0)
byte1 = ARCH_DEP( vfetchb )( addr1, r1, regs );
@@ -4034,30 +4734,15 @@ BYTE equlen = 0; /* Equal byte counter */
len2--;
}
- /* update GPRs if we just crossed half page - could get rupt */
- if ((addr1 & 0x7FF) == 0 || (addr2 & 0x7FF) == 0)
- {
- /* Update R1 and R2 to point to next bytes to compare */
- SET_GR_A( r1, regs, addr1 );
- SET_GR_A( r2, regs, addr2 );
-
- /* Set R1+1 and R2+1 to remaining operand lengths */
- SET_GR_A( r1+1, regs, len1 );
- SET_GR_A( r2+1, regs, len2 );
- }
-
- /* If equal byte count has reached substring length
- exit with condition code zero */
- if (equlen == sublen)
- {
- cc = 0;
- break;
- }
-
} /* end for(i) */
+#if CUSE_DEBUG
+ logmsg("CUSE: scan complete: addr1=%X, len1=%ld, addr2=%X, len2=%ld, equlen=%ld, eqaddr1=%X, remlen1=%ld, eqaddr2=%X, remlen2=%ld, i=%d, cc=%d \n",
+ addr1, len1, addr2, len2, equlen, eqaddr1, remlen1, eqaddr2, remlen2, i, cc);
+#endif
+
/* Update the registers */
- if (cc < 2)
+ if (cc < 2 && equlen > 0)
{
/* Update R1 and R2 to point to the equal substring */
SET_GR_A( r1, regs, eqaddr1 );
@@ -4083,6 +4768,7 @@ BYTE equlen = 0; /* Equal byte counter */
regs->psw.cc = cc;
} /* end DEF_INST( compare_until_substring_equal ) */
+
#endif /* defined( FEATURE_STRING_INSTRUCTION ) */
diff --git a/tests/CUSE-01-basic.asm b/tests/CUSE-01-basic.asm
new file mode 100644
index 000000000..dc4e97b02
--- /dev/null
+++ b/tests/CUSE-01-basic.asm
@@ -0,0 +1,2028 @@
+ TITLE ' CUSE-01-basic (Test CUSE instruction)'
+***********************************************************************
+*
+* CUSE basic instruction tests
+*
+***********************************************************************
+*
+* This program tests proper functioning of the CUSE instruction.
+* Specification Exceptions are not tested.
+*
+* PLEASE NOTE that the tests are very SIMPLE TESTS designed to catch
+* obvious coding errors. None of the tests are thorough. They are
+* NOT designed to test all aspects of the instruction.
+*
+* NOTE: This test is based on the CLCL-et-al Test but modified to
+* only test the CUSE instruction. -- James Wekel November 2022
+*
+***********************************************************************
+*
+* Example Hercules Testcase:
+*
+*
+* *Testcase CUSE-01-basic (Test CUSE instructions)
+*
+* # ------------------------------------------------------------
+* # This tests only the basic function of the CUSE instruction.
+* # Specification Exceptions are NOT tested.
+* # ------------------------------------------------------------
+*
+* mainsize 16
+* numcpu 1
+* sysclear
+* archlvl z/Arch
+* loadcore "$(testpath)/CUSE-01-basic.core" 0x0
+* runtest 1
+* *Done
+*
+*
+***********************************************************************
+ SPACE 2
+CUSE1TST START 0
+ USING CUSE1TST,R0 Low core addressability
+ SPACE 2
+ ORG CUSE1TST+X'1A0' z/Architecure RESTART PSW
+ DC X'0000000180000000'
+ DC AD(BEGIN)
+ SPACE 2
+ ORG CUSE1TST+X'1D0' z/Architecure PROGRAM CHECK PSW
+ DC X'0002000180000000'
+ DC AD(X'DEAD')
+ SPACE 3
+ ORG CUSE1TST+X'200' Start of actual test program...
+ EJECT
+***********************************************************************
+* The actual "CUSE1TST" program itself...
+***********************************************************************
+*
+* Architecture Mode: z/Arch
+* Register Usage:
+*
+* R0 CUSE - SS length
+* R1 CUSE - Pad byte
+* R2 CUSE - First-Operand Address
+* R3 CUSE - First-Operand Length
+* R4 CUSE - Second-Operand Address
+* R5 CUSE - Second-Operand Length
+* R6 Testing control table - base current entry
+* R7 (work)
+* R8 First base register
+* R9 Second base register
+* R10-R13 (work)
+* R14 Subroutine call
+* R15 Secondary Subroutine call or work
+*
+***********************************************************************
+ SPACE
+ USING BEGIN,R8 FIRST Base Register
+ USING BEGIN+4096,R9 SECOND Base Register
+ SPACE
+BEGIN BALR R8,0 Initalize FIRST base register
+ BCTR R8,0 Initalize FIRST base register
+ BCTR R8,0 Initalize FIRST base register
+ SPACE
+ LA R9,2048(,R8) Initalize SECOND base register
+ LA R9,2048(,R9) Initalize SECOND base register
+ SPACE 2
+***********************************************************************
+* Run the test(s)...
+***********************************************************************
+ SPACE
+ BAL R14,TEST01 Test CUSE instruction
+ SPACE 2
+***********************************************************************
+* Test for normal or unexpected test completion...
+***********************************************************************
+ SPACE
+ CLI TESTNUM,X'F4' Did we end on expected test?
+ BNE FAILTEST No?! Then FAIL the test!
+ SPACE
+ CLI SUBTEST,X'04' Did we end on expected SUB-test?
+ BNE FAILTEST No?! Then FAIL the test!
+ SPACE
+ B EOJ Yes, then normal completion!
+ EJECT
+***********************************************************************
+* Fixed test storage locations ...
+***********************************************************************
+ SPACE 2
+ ORG CUSE1TST+X'400'
+ SPACE 4
+TESTADDR DS 0D Where test/subtest numbers will go
+TESTNUM DC X'99' Test number of active test
+SUBTEST DC X'99' Active test sub-test number
+ SPACE 4
+ ORG *+X'100'
+ EJECT
+***********************************************************************
+* TEST01 Test CUSE instruction
+***********************************************************************
+ SPACE
+TEST01 MVI TESTNUM,X'01'
+ SPACE
+ LA R6,CUSECTL Point R6 --> testing control table
+ USING CUSETEST,R6 What each table entry looks like
+ SPACE
+TST1LOOP EQU *
+ IC R10,TNUM Set test number
+ STC R10,TESTNUM
+*
+** Initialize operand data (move data to testing address)
+*
+* Build Operand-1
+ SPACE
+ L R2,OP1WHERE Where to move operand-1 data to
+ L R3,OP1LEN Get operand-1 length
+ L R10,SS1ADDR Calculate OP 1 starting
+ SR R10,R3 address
+ A R10,SS1LEN
+ L R11,OP1LEN
+ MVCL R2,R10
+ SPACE
+ BCTR R2,0 less one for last char addr
+ MVC 0(0,R2),SS1LAST set last char
+ SPACE
+* Build Operand-2
+ SPACE
+ L R4,OP2WHERE Where to move operand-1 data to
+ L R5,OP2LEN Get operand-1 length
+ L R10,SS2ADDR Calculate OP 2 starting
+ SR R10,R5 address
+ A R10,SS2LEN
+ L R11,OP2LEN
+ MVCL R4,R10
+ SPACE
+ BCTR R4,0 less one for last char addr
+ MVC 0(0,R4),SS2LAST set last char
+ SPACE 2
+** Execute CUSE instruction and check for expected condition code
+ SPACE
+ L R11,FAILMASK (failure CC)
+ SLL R11,4 (shift to BC instr CC position)
+ SPACE
+ IC R0,SSLEN Set SS length
+ IC R1,PAD Set SS Pad byte
+ SPACE
+ LM R2,R5,OPSWHERE
+ SPACE
+ MVI SUBTEST,X'00' (primary test)
+DOAGAIN CUSE R2,R4 Do Test
+ SPACE
+ EX R11,CUSEBC fail if...
+ BC B'0001',DOAGAIN cc=3, not finished
+ SPACE 2
+*
+** Verify R2,R3,R4,R5 contain (or still contain!) expected values
+*
+ LM R10,R11,ENDOP1 end OP-1 address and length
+ SPACE
+ MVI SUBTEST,X'01' (R2 result - op1 found addr)
+ CLR R2,R10 R2 correct?
+ BNE CUSEFAIL No, FAILTEST!
+ SPACE
+ MVI SUBTEST,X'02' (R3 result - op1 remaining len)
+ CLR R3,R11 R3 correct
+ BNE CUSEFAIL No, FAILTEST!
+ SPACE
+ LM R10,R11,ENDOP2 end OP-2 address and length
+ SPACE
+ MVI SUBTEST,X'03' (R4 result - op2 found addr)
+ CLR R4,R10 R4 correct
+ BNE CUSEFAIL No, FAILTEST!
+ SPACE
+ MVI SUBTEST,X'04' (R3 result - op2 remaining len)
+ CLR R5,R11 R5 correct
+ BNE CUSEFAIL No, FAILTEST!
+ SPACE
+ LA R6,CUSENEXT Go on to next table entry
+ CLC =F'0',0(R6) End of table?
+ BNE TST1LOOP No, loop...
+ B CUSEDONE Done! (success!)
+ SPACE 2
+CUSEFAIL LA R14,FAILTEST Unexpected results!
+CUSEDONE BR R14 Return to caller or FAILTEST
+ SPACE 2
+CUSEBC BC 0,CUSEFAIL (fail if unexpected condition code)
+ SPACE 2
+ DROP R6
+ DROP R15
+ USING BEGIN,R8
+ EJECT
+***********************************************************************
+* Normal completion or Abnormal termination PSWs
+***********************************************************************
+ SPACE 5
+EOJPSW DC 0D'0',X'0002000180000000',AD(0)
+ SPACE
+EOJ LPSWE EOJPSW Normal completion
+ SPACE 5
+FAILPSW DC 0D'0',X'0002000180000000',AD(X'BAD')
+ SPACE
+FAILTEST LPSWE FAILPSW Abnormal termination
+ SPACE 7
+***********************************************************************
+* Working Storage
+***********************************************************************
+ SPACE 2
+ LTORG , Literals pool
+ SPACE 3
+K EQU 1024 One KB
+PAGE EQU (4*K) Size of one page
+K4 EQU (4*K) 4 KB
+K32 EQU (32*K) 32 KB
+K64 EQU (64*K) 64 KB
+MB EQU (K*K) 1 MB
+ EJECT
+CUSE1TST CSECT ,
+ SPACE 2
+***********************************************************************
+* CUSETEST DSECT
+***********************************************************************
+ SPACE 2
+CUSETEST DSECT ,
+TNUM DC X'00' CUSE table number
+ DC XL3'00'
+ SPACE 2
+SSLEN DC AL1(0) CUSE - SS length
+PAD DC X'00' CUSE - Pad byte
+SS1LAST DC X'00' First-Operand SS last byte
+SS2LAST DC X'00' Second-Operand SS last byte
+ SPACE 2
+SS1ADDR DC A(0) First-Operand SS Address
+SS1LEN DC A(0) First-Operand SS length
+SS2ADDR DC A(0) Second-Operand SS Address
+SS2LEN DC A(0) Second-Operand SS length
+ SPACE 2
+OPSWHERE EQU *
+OP1WHERE DC A(0) Where Operand-1 data should be placed
+OP1LEN DC F'0' CUSE - First-Operand Length
+OP2WHERE DC A(0) Where Operand-2 data should be placed
+OP2LEN DC F'0' CUSE - Second-Operand Length
+
+ SPACE 2
+FAILMASK DC A(0) Failure Branch on Condition mask
+ SPACE 2
+* Ending register values
+ENDOP1 DC A(0) Operand 1 address
+ DC A(0) Operand 1 length
+ENDOP2 DC A(0) Operand 2 address
+ DC A(0) Operand 2 length
+ SPACE 2
+CUSENEXT EQU * Start of next table entry...
+ SPACE 5
+REG2PATT EQU X'AABBCCDD' Polluted Register pattern
+REG2LOW EQU X'DD' (last byte above)
+ EJECT
+***********************************************************************
+* CUSE Testing Control tables (ref: CUSETEST DSECT)
+***********************************************************************
+ SPACE
+CUSE1TST CSECT ,
+CUSECTL DC 0A(0) start of table
+ SPACE
+***********************************************************************
+* tests with CC=0
+***********************************************************************
+ SPACE
+CC0T1 DS 0F
+ DC X'01' Test Num
+ DC XL3'00'
+*
+ DC AL1(1) SS Length
+ DC X'00' Pad Byte
+ DC X'AA' First-Operand SS last byte
+ DC X'AA' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(001) Op-1 SS & length
+ DC A(COP2A),A(001) OP-2 SS & length
+* Target
+ DC A(1*MB+(1*K32)),A(1) Op-1 & length
+ DC A(2*MB+(1*K32)),A(1) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(1*K32)+000),A(001) OP-1
+ DC A(2*MB+(1*K32)+000),A(001) OP-2
+ SPACE 2
+CC0T2 DS 0F
+ DC X'02' Test Num
+ DC XL3'00'
+*
+ DC AL1(1) SS Length
+ DC X'00' Pad Byte
+ DC X'BB' First-Operand SS last byte
+ DC X'BB' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(001) Op-1 SS & length
+ DC A(COP2A),A(001) OP-2 SS & length
+* Target
+ DC A(1*MB+(2*K32)),A(2) Op-1 & length
+ DC A(2*MB+(2*K32)),A(2) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(2*K32)+001),A(001) OP-1
+ DC A(2*MB+(2*K32)+001),A(001) OP-2
+ SPACE 2
+CC0T3 DS 0F
+ DC X'03' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(1*MB+(3*K32)),A(8) Op-1 & length
+ DC A(2*MB+(3*K32)),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(3*K32)+(8-4)),A(004) OP-1
+ DC A(2*MB+(3*K32)+(8-4)),A(004) OP-2
+ SPACE 2
+CC0T4 DS 0F
+ DC X'04' Test Num
+ DC XL3'00'
+*
+ DC AL1(13) SS Length
+ DC X'00' Pad Byte
+ DC X'DD' First-Operand SS last byte
+ DC X'DD' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(013) Op-1 SS & length
+ DC A(COP2A),A(013) OP-2 SS & length
+* Target
+ DC A(1*MB+(4*K32)),A(63) Op-1 & length
+ DC A(2*MB+(4*K32)),A(63) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(4*K32)+(63-13)),A(013) OP-1
+ DC A(2*MB+(4*K32)+(63-13)),A(013) OP-2
+ SPACE 2
+CC0T5 DS 0F
+ DC X'05' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'EE' First-Operand SS last byte
+ DC X'EE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(5*K32)),A(512) Op-1 & length
+ DC A(2*MB+(5*K32)),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(5*K32)+(512-62)),A(062) OP-1
+ DC A(2*MB+(5*K32)+(512-62)),A(062) OP-2
+ SPACE 2
+CC0T6 DS 0F
+ DC X'06' Test Num
+ DC XL3'00'
+*
+ DC AL1(127) SS Length
+ DC X'00' Pad Byte
+ DC X'FF' First-Operand SS last byte
+ DC X'FF' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(127) Op-1 SS & length
+ DC A(COP2A),A(127) OP-2 SS & length
+* Target
+ DC A(1*MB+(6*K32)),A(2048) Op-1 & length
+ DC A(2*MB+(6*K32)),A(2048) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(6*K32)+(2048-127)),A(127) OP-1
+ DC A(2*MB+(6*K32)+(2048-127)),A(127) OP-2
+ SPACE
+* Cross page bounday tests
+ SPACE
+* Cross page bounday - operand-1
+ SPACE
+CC0T7 DS 0F
+ DC X'07' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'55' First-Operand SS last byte
+ DC X'55' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(7*K32)-128),A(512) Op-1 & length
+ DC A(2*MB+(7*K32)),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(7*K32)+(512-62)-128),A(062) OP-1
+ DC A(2*MB+(7*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-2
+ SPACE
+CC0T8 DS 0F
+ DC X'08' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'66' First-Operand SS last byte
+ DC X'66' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(8*K32)),A(512) Op-1 & length
+ DC A(2*MB+(8*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(8*K32)+(512-62)),A(062) OP-1
+ DC A(2*MB+(8*K32)+(512-62)-128),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+CC0T9 DS 0F
+ DC X'09' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(9*K32)-96),A(512) Op-1 & length
+ DC A(2*MB+(9*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(9*K32)+(512-62)-96),A(062) OP-1
+ DC A(2*MB+(9*K32)+(512-62)-128),A(062) OP-2
+ SPACE
+* PAD tests
+ SPACE
+* Pad - operand-1
+ SPACE
+CC0TA DS 0F
+ DC X'0A' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(10*K32)),A(500) Op-1 & length
+ DC A(2*MB+(10*K32)),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(10*K32)+(512-62)),A(062-(512-500)) OP-1
+ DC A(2*MB+(10*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Pad - operand-2
+ SPACE
+CC0TB DS 0F
+ DC X'0B' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(11*K32)),A(512) Op-1 & length
+ DC A(2*MB+(11*K32)),A(500) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(11*K32)+(512-62)),A(062) OP-1
+ DC A(2*MB+(11*K32)+(512-62)),A(062-(512-500)) OP-2
+ SPACE
+* PAD and Cross page bounday tests
+ SPACE
+* Pad - operand-1 ; Cross page bounday - operand-1
+ SPACE
+CC0TC DS 0F
+ DC X'0C' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(12*K32)-96),A(500) Op-1 & length
+ DC A(2*MB+(12*K32)),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(12*K32)+(512-62)-96),A(062-(512-500)) OP-1
+ DC A(2*MB+(12*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Pad - operand-1 ; Cross page bounday - operand-2
+ SPACE
+CC0TD DS 0F
+ DC X'0D' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(13*K32)),A(500) Op-1 & length
+ DC A(2*MB+(13*K32)-96),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(13*K32)+(512-62)),A(062-(512-500)) OP-1
+ DC A(2*MB+(13*K32)+(512-62)-96),A(062) OP-2
+ SPACE
+* Pad - operand-2 ; Cross page bounday - operand-1
+ SPACE
+CC0TE DS 0F
+ DC X'0E' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(14*K32)-96),A(512) Op-1 & length
+ DC A(2*MB+(14*K32)),A(500) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(14*K32)+(512-62)-96),A(062) OP-1
+ DC A(2*MB+(14*K32)+(512-62)),A(062-(512-500)) OP-2
+ SPACE
+* Pad - operand-2 ; Cross page bounday - operand-2
+ SPACE
+CC0TF DS 0F
+ DC X'0F' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(1*MB+(15*K32)),A(512) Op-1 & length
+ DC A(2*MB+(15*K32)-96),A(500) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(1*MB+(15*K32)+(512-62)),A(062) OP-1
+ DC A(2*MB+(15*K32)+(512-62)-96),A(062-(512-500)) OP-2
+ EJECT
+***********************************************************************
+* tests with CC=1
+***********************************************************************
+ SPACE
+CC1T1 DS 0F
+ DC X'11' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'11' Pad Byte
+ DC X'11' First-Operand SS last byte
+ DC X'11' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(001) Op-1 SS & length
+ DC A(COP2A),A(001) OP-2 SS & length
+* Target
+ DC A(3*MB+(1*K32)),A(1) Op-1 & length
+ DC A(4*MB+(1*K32)),A(1) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(1*K32)+000),A(001) OP-1
+ DC A(4*MB+(1*K32)+000),A(001) OP-2
+ SPACE 2
+CC1T2 DS 0F
+ DC X'12' Test Num
+ DC XL3'00'
+*
+ DC AL1(2) SS Length
+ DC X'00' Pad Byte
+ DC X'BB' First-Operand SS last byte
+ DC X'BB' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(001) Op-1 SS & length
+ DC A(COP2A),A(001) OP-2 SS & length
+* Target
+ DC A(3*MB+(2*K32)),A(2) Op-1 & length
+ DC A(4*MB+(2*K32)),A(2) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(2*K32)+001),A(001) OP-1
+ DC A(4*MB+(2*K32)+001),A(001) OP-2
+ SPACE 2
+CC1T3 DS 0F
+ DC X'13' Test Num
+ DC XL3'00'
+*
+ DC AL1(6) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(3*MB+(3*K32)),A(8) Op-1 & length
+ DC A(4*MB+(3*K32)),A(8) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(3*K32)+(8-4)),A(004) OP-1
+ DC A(4*MB+(3*K32)+(8-4)),A(004) OP-2
+ SPACE 2
+CC1T4 DS 0F
+ DC X'14' Test Num
+ DC XL3'00'
+*
+ DC AL1(18) SS Length
+ DC X'00' Pad Byte
+ DC X'DD' First-Operand SS last byte
+ DC X'DD' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(013) Op-1 SS & length
+ DC A(COP2A),A(013) OP-2 SS & length
+* Target
+ DC A(3*MB+(4*K32)),A(63) Op-1 & length
+ DC A(4*MB+(4*K32)),A(63) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(4*K32)+(63-13)),A(013) OP-1
+ DC A(4*MB+(4*K32)+(63-13)),A(013) OP-2
+ SPACE 2
+CC1T5 DS 0F
+ DC X'15' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'EE' First-Operand SS last byte
+ DC X'EE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(5*K32)),A(512) Op-1 & length
+ DC A(4*MB+(5*K32)),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(5*K32)+(512-62)),A(062) OP-1
+ DC A(4*MB+(5*K32)+(512-62)),A(062) OP-2
+ SPACE 2
+CC1T6 DS 0F
+ DC X'16' Test Num
+ DC XL3'00'
+*
+ DC AL1(128) SS Length
+ DC X'00' Pad Byte
+ DC X'FF' First-Operand SS last byte
+ DC X'FF' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(127) Op-1 SS & length
+ DC A(COP2A),A(127) OP-2 SS & length
+* Target
+ DC A(3*MB+(6*K32)),A(2048) Op-1 & length
+ DC A(4*MB+(6*K32)),A(2048) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(6*K32)+(2048-127)),A(127) OP-1
+ DC A(4*MB+(6*K32)+(2048-127)),A(127) OP-2
+ SPACE
+* Cross page bounday tests
+ SPACE
+* Cross page bounday - operand-1
+ SPACE
+CC1T7 DS 0F
+ DC X'17' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'55' First-Operand SS last byte
+ DC X'55' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(7*K32)-128),A(512) Op-1 & length
+ DC A(4*MB+(7*K32)),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(7*K32)+(512-62)-128),A(062) OP-1
+ DC A(4*MB+(7*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-2
+ SPACE
+CC1T8 DS 0F
+ DC X'18' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'66' First-Operand SS last byte
+ DC X'66' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(8*K32)),A(512) Op-1 & length
+ DC A(4*MB+(8*K32)-128),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(8*K32)+(512-62)),A(062) OP-1
+ DC A(4*MB+(8*K32)+(512-62)-128),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+CC1T9 DS 0F
+ DC X'19' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(9*K32)-96),A(512) Op-1 & length
+ DC A(4*MB+(9*K32)-128),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(9*K32)+(512-62)-96),A(062) OP-1
+ DC A(4*MB+(9*K32)+(512-62)-128),A(062) OP-2
+ SPACE
+* PAD tests
+ SPACE
+* Pad - operand-1
+ SPACE
+CC1TA DS 0F
+ DC X'1A' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(10*K32)),A(500) Op-1 & length
+ DC A(4*MB+(10*K32)),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(10*K32)+(512-62)),A(062-(512-500)) OP-1
+ DC A(4*MB+(10*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Pad - operand-2
+ SPACE
+CC1TB DS 0F
+ DC X'1B' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(11*K32)),A(512) Op-1 & length
+ DC A(4*MB+(11*K32)),A(500) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(11*K32)+(512-62)),A(062) OP-1
+ DC A(4*MB+(11*K32)+(512-62)),A(062-(512-500)) OP-2
+ SPACE
+* PAD and Cross page bounday tests
+ SPACE
+* Pad - operand-1 ; Cross page bounday - operand-1
+ SPACE
+CC1TC DS 0F
+ DC X'1C' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(12*K32)-96),A(500) Op-1 & length
+ DC A(4*MB+(12*K32)),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(12*K32)+(512-62)-96),A(062-(512-500)) OP-1
+ DC A(4*MB+(12*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Pad - operand-1 ; Cross page bounday - operand-2
+ SPACE
+CC1TD DS 0F
+ DC X'1D' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(13*K32)),A(500) Op-1 & length
+ DC A(4*MB+(13*K32)-96),A(512) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(13*K32)+(512-62)),A(062-(512-500)) OP-1
+ DC A(4*MB+(13*K32)+(512-62)-96),A(062) OP-2
+ SPACE
+* Pad - operand-2 ; Cross page bounday - operand-1
+ SPACE
+CC1TE DS 0F
+ DC X'1E' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(14*K32)-96),A(512) Op-1 & length
+ DC A(4*MB+(14*K32)),A(500) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(14*K32)+(512-62)-96),A(062) OP-1
+ DC A(4*MB+(14*K32)+(512-62)),A(062-(512-500)) OP-2
+ SPACE
+* Pad - operand-2 ; Cross page bounday - operand-2
+ SPACE
+CC1TF DS 0F
+ DC X'1F' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(3*MB+(15*K32)),A(512) Op-1 & length
+ DC A(4*MB+(15*K32)-96),A(500) Op-2 & length
+*
+ DC A(11) CC1 Fail mask
+* Ending register values
+ DC A(3*MB+(15*K32)+(512-62)),A(062) OP-1
+ DC A(4*MB+(15*K32)+(512-62)-96),A(062-(512-500)) OP-2
+ EJECT
+***********************************************************************
+* tests with CC=2
+***********************************************************************
+ SPACE
+CC2T1 DS 0F
+ DC X'21' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'11' Pad Byte
+ DC X'11' First-Operand SS last byte
+ DC X'12' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(001) Op-1 SS & length
+ DC A(COP2A),A(001) OP-2 SS & length
+* Target
+ DC A(5*MB+(1*K32)),A(1) Op-1 & length
+ DC A(6*MB+(1*K32)),A(1) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(1*K32)+001),A(000) OP-1
+ DC A(6*MB+(1*K32)+001),A(000) OP-2
+ SPACE 2
+CC2T2 DS 0F
+ DC X'22' Test Num
+ DC XL3'00'
+*
+ DC AL1(2) SS Length
+ DC X'00' Pad Byte
+ DC X'BB' First-Operand SS last byte
+ DC X'BC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(001) Op-1 SS & length
+ DC A(COP2A),A(001) OP-2 SS & length
+* Target
+ DC A(5*MB+(2*K32)),A(2) Op-1 & length
+ DC A(6*MB+(2*K32)),A(2) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(2*K32)+002),A(000) OP-1
+ DC A(6*MB+(2*K32)+002),A(000) OP-2
+ SPACE 2
+CC2T3 DS 0F
+ DC X'23' Test Num
+ DC XL3'00'
+*
+ DC AL1(6) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CD' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(5*MB+(3*K32)),A(8) Op-1 & length
+ DC A(6*MB+(3*K32)),A(8) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(3*K32)+8),A(000) OP-1
+ DC A(6*MB+(3*K32)+8),A(000) OP-2
+ SPACE 2
+CC2T4 DS 0F
+ DC X'24' Test Num
+ DC XL3'00'
+*
+ DC AL1(18) SS Length
+ DC X'00' Pad Byte
+ DC X'DD' First-Operand SS last byte
+ DC X'DE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(013) Op-1 SS & length
+ DC A(COP2A),A(013) OP-2 SS & length
+* Target
+ DC A(5*MB+(4*K32)),A(63) Op-1 & length
+ DC A(6*MB+(4*K32)),A(63) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(4*K32)+63),A(000) OP-1
+ DC A(6*MB+(4*K32)+63),A(000) OP-2
+ SPACE 2
+CC2T5 DS 0F
+ DC X'25' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'EE' First-Operand SS last byte
+ DC X'EF' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(5*K32)),A(512) Op-1 & length
+ DC A(6*MB+(5*K32)),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(5*K32)+512),A(000) OP-1
+ DC A(6*MB+(5*K32)+512),A(000) OP-2
+ SPACE 2
+CC2T6 DS 0F
+ DC X'26' Test Num
+ DC XL3'00'
+*
+ DC AL1(128) SS Length
+ DC X'00' Pad Byte
+ DC X'FF' First-Operand SS last byte
+ DC X'F0' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(127) Op-1 SS & length
+ DC A(COP2A),A(127) OP-2 SS & length
+* Target
+ DC A(5*MB+(6*K32)),A(2048) Op-1 & length
+ DC A(6*MB+(6*K32)),A(2048) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(6*K32)+2048),A(000) OP-1
+ DC A(6*MB+(6*K32)+2048),A(000) OP-2
+ SPACE
+* Cross page bounday tests
+ SPACE
+* Cross page bounday - operand-1
+ SPACE
+CC2T7 DS 0F
+ DC X'27' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'55' First-Operand SS last byte
+ DC X'56' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(7*K32)-128),A(512) Op-1 & length
+ DC A(6*MB+(7*K32)),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(7*K32)+512-128),A(000) OP-1
+ DC A(6*MB+(7*K32)+512),A(000) OP-2
+ SPACE
+* Cross page bounday - operand-2
+ SPACE
+CC2T8 DS 0F
+ DC X'28' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'67' First-Operand SS last byte
+ DC X'66' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(8*K32)),A(512) Op-1 & length
+ DC A(6*MB+(8*K32)-128),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(8*K32)+512),A(000) OP-1
+ DC A(6*MB+(8*K32)+512-128),A(000) OP-2
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+CC2T9 DS 0F
+ DC X'29' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'78' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(9*K32)-96),A(512) Op-1 & length
+ DC A(6*MB+(9*K32)-128),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(9*K32)+512-96),A(000) OP-1
+ DC A(6*MB+(9*K32)+512-128),A(000) OP-2
+ SPACE
+* PAD tests
+ SPACE
+* Pad - operand-1
+ SPACE
+CC2TA DS 0F
+ DC X'2A' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'41' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(10*K32)),A(500) Op-1 & length
+ DC A(6*MB+(10*K32)),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(10*K32)+500),A(000) OP-1
+ DC A(6*MB+(10*K32)+512),A(000) OP-2
+ SPACE
+* Pad - operand-2
+ SPACE
+CC2TB DS 0F
+ DC X'2B' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'41' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(11*K32)),A(512) Op-1 & length
+ DC A(6*MB+(11*K32)),A(500) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(11*K32)+512),A(000) OP-1
+ DC A(6*MB+(11*K32)+500),A(000) OP-2
+ SPACE
+* PAD and Cross page bounday tests
+ SPACE
+* Pad - operand-1 ; Cross page bounday - operand-1
+ SPACE
+CC2TC DS 0F
+ DC X'2C' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'41' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(12*K32)-96),A(500) Op-1 & length
+ DC A(6*MB+(12*K32)),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(12*K32)+500-96),A(000) OP-1
+ DC A(6*MB+(12*K32)+512),A(000) OP-2
+ SPACE
+* Pad - operand-1 ; Cross page bounday - operand-2
+ SPACE
+CC2TD DS 0F
+ DC X'2D' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'41' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(13*K32)),A(500) Op-1 & length
+ DC A(6*MB+(13*K32)-96),A(512) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(13*K32)+500),A(000) OP-1
+ DC A(6*MB+(13*K32)+512-96),A(000) OP-2
+ SPACE
+* Pad - operand-2 ; Cross page bounday - operand-1
+ SPACE
+CC2TE DS 0F
+ DC X'2E' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'41' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(14*K32)-96),A(512) Op-1 & length
+ DC A(6*MB+(14*K32)),A(500) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(14*K32)+512-96),A(000) OP-1
+ DC A(6*MB+(14*K32)+500),A(000) OP-2
+ SPACE
+* Pad - operand-2 ; Cross page bounday - operand-2
+ SPACE
+CC2TF DS 0F
+ DC X'2F' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'41' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(062) Op-1 SS & length
+ DC A(COP2B),A(062) OP-2 SS & length
+* Target
+ DC A(5*MB+(15*K32)),A(512) Op-1 & length
+ DC A(6*MB+(15*K32)-96),A(500) Op-2 & length
+*
+ DC A(13) not CC2 Fail mask
+* Ending register values
+ DC A(5*MB+(15*K32)+512),A(000) OP-1
+ DC A(6*MB+(15*K32)+500-96),A(000) OP-2
+ EJECT
+***********************************************************************
+* tests with CC=3
+***********************************************************************
+ SPACE
+CC3T1 DS 0F
+ DC X'31' Test Num
+ DC XL3'00'
+*
+ DC AL1(1) SS Length
+ DC X'00' Pad Byte
+ DC X'AA' First-Operand SS last byte
+ DC X'AA' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(1) Op-1 SS & length
+ DC A(COP2A),A(1) OP-2 SS & length
+* Target
+ DC A(7*MB+(1*K32)),A(4096+128) Op-1 & length
+ DC A(8*MB+(1*K32)),A(4096+128) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(7*MB+(1*K32)+4096+128-1),A(001) OP-1
+ DC A(8*MB+(1*K32)+4096+128-1),A(001) OP-2
+ SPACE 2
+CC3T3 DS 0F
+ DC X'33' Test Num
+ DC XL3'00'
+*
+ DC AL1(6) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(7*MB+(3*K32)),A(4096+128) Op-1 & length
+ DC A(8*MB+(3*K32)),A(4096+128) Op-2 & length
+*
+ DC A(10) not CC1 or CC3 Fail mask
+* Ending register values
+ DC A(7*MB+(3*K32)+(4096+128-4)),A(004) OP-1
+ DC A(8*MB+(3*K32)+(4096+128-4)),A(004) OP-2
+ SPACE 2
+CC3T4 DS 0F
+ DC X'34' Test Num
+ DC XL3'00'
+*
+ DC AL1(18) SS Length
+ DC X'00' Pad Byte
+ DC X'DD' First-Operand SS last byte
+ DC X'DE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(013) Op-1 SS & length
+ DC A(COP2A),A(013) OP-2 SS & length
+* Target
+ DC A(7*MB+(4*K32)),A(4096+63) Op-1 & length
+ DC A(8*MB+(4*K32)),A(4096+63) Op-2 & length
+*
+ DC A(12) not CC2 or CC3 Fail mask
+* Ending register values
+ DC A(7*MB+(4*K32)+4096+63),A(000) OP-1
+ DC A(8*MB+(4*K32)+4096+63),A(000) OP-2
+ SPACE
+* Cross page bounday tests
+ SPACE
+* Cross page bounday - operand-1
+ SPACE
+CC3T7 DS 0F
+ DC X'37' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'55' First-Operand SS last byte
+ DC X'55' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(7*MB+(7*K32)-128),A(4096+128) Op-1 & length
+ DC A(8*MB+(7*K32)),A(4096+128) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(7*MB+(7*K32)+(4096+128-62)-128),A(062) OP-1
+ DC A(8*MB+(7*K32)+(4096+128-62)),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-2
+ SPACE
+CC3T8 DS 0F
+ DC X'38' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'66' First-Operand SS last byte
+ DC X'66' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(7*MB+(8*K32)),A(4096+128) Op-1 & length
+ DC A(8*MB+(8*K32)-128),A(4096+128) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(7*MB+(8*K32)+(4096+128-62)),A(062) OP-1
+ DC A(8*MB+(8*K32)+(4096+128-62)-128),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+CC3T9 DS 0F
+ DC X'39' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(7*MB+(9*K32)-96),A(4096+128) Op-1 & length
+ DC A(8*MB+(9*K32)-128),A(4096+128) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(7*MB+(9*K32)+(4096+128-62)-96),A(062) OP-1
+ DC A(8*MB+(9*K32)+(4096+128-62)-128),A(062) OP-2
+ EJECT
+***********************************************************************
+* tests - special pad test
+***********************************************************************
+ SPACE
+* Op-1 - length=0
+PAD4T1 DS 0F
+ DC X'41' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(000) Op-1 SS & length
+ DC A(COP2B),A(4) OP-2 SS & length
+* Target
+ DC A(9*MB+(1*K32)),A(000) Op-1 & length
+ DC A(10*MB+(1*K32)),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(1*K32)),A(000) OP-1
+ DC A(10*MB+(1*K32)+(512-4)),A(004) OP-2
+ SPACE 2
+* Op-2 - length=0
+PAD4T2 DS 0F
+ DC X'42' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'40' Pad Byte
+ DC X'40' First-Operand SS last byte
+ DC X'40' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(4) Op-1 SS & length
+ DC A(COP2B),A(000) OP-2 SS & length
+* Target
+ DC A(9*MB+(2*K32)),A(512) Op-1 & length
+ DC A(10*MB+(2*K32)),A(0) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(2*K32)+(512-4)),A(004) OP-1
+ DC A(10*MB+(2*K32)),A(000) OP-2
+ EJECT
+***********************************************************************
+* tests for Special Cases Optimizations
+***********************************************************************
+ SPACE 2
+* tests for Special Cases Optimizations
+ SPACE
+SC5T1 DS 0F
+ DC X'51' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(032) Op-1 SS & length
+ DC A(COP2C),A(032) OP-2 SS & length
+* Target
+ DC A(9*MB+(7*K32)-96),A(512) Op-1 & length
+ DC A(10*MB+(7*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(9*MB+(7*K32)+(512-32)-96-3),A(032+3) OP-1
+ DC A(10*MB+(7*K32)+(512-32)-128-3),A(032+3) OP-2
+ SPACE
+SC5T2 DS 0F
+ DC X'52' Test Num
+ DC XL3'00'
+*
+ DC AL1(7) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(027) Op-1 SS & length
+ DC A(COP2C),A(027) OP-2 SS & length
+* Target
+ DC A(9*MB+(8*K32)-96),A(512) Op-1 & length
+ DC A(10*MB+(8*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(9*MB+(8*K32)+(512-27)-96-3),A(027+3) OP-1
+ DC A(10*MB+(8*K32)+(512-27)-128-3),A(027+3) OP-2
+ SPACE
+SC5T3 DS 0F
+ DC X'53' Test Num
+ DC XL3'00'
+*
+ DC AL1(1) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1B),A(027) Op-1 SS & length
+ DC A(COP2B),A(027) OP-2 SS & length
+* Target
+ DC A(9*MB+(9*K32)-96),A(512) Op-1 & length
+ DC A(10*MB+(9*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(9*MB+(9*K32)+(512-27)-96),A(027) OP-1
+ DC A(10*MB+(9*K32)+(512-27)-128),A(027) OP-2
+ SPACE
+SC5T4 DS 0F
+ DC X'54' Test Num
+ DC XL3'00'
+*
+ DC AL1(3) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1D),A(027) Op-1 SS & length
+ DC A(COP2D),A(027) OP-2 SS & length
+* Target
+ DC A(9*MB+(10*K32)-96),A(512) Op-1 & length
+ DC A(10*MB+(10*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(9*MB+(10*K32)+(512-27)-96),A(27) OP-1
+ DC A(10*MB+(10*K32)+(512-27)-128),A(27) OP-2
+ SPACE
+* subtring starts on a page boundary
+ SPACE
+SC5T5 DS 0F
+ DC X'55' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(11*K32)-4),A(8) Op-1 & length
+ DC A(10*MB+(11*K32)-4),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(11*K32)-4+(8-4)),A(004) OP-1
+ DC A(10*MB+(11*K32)-4+(8-4)),A(004) OP-2
+ SPACE
+* subtring starts on a byte before page boundary
+ SPACE
+SC5T6 DS 0F
+ DC X'56' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(12*K32)-5),A(8) Op-1 & length
+ DC A(10*MB+(12*K32)-5),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(12*K32)-5+(8-4)),A(004) OP-1
+ DC A(10*MB+(12*K32)-5+(8-4)),A(004) OP-2
+ SPACE
+* subtring starts on a byte after page boundary
+ SPACE
+SC5T7 DS 0F
+ DC X'57' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(13*K32)-3),A(8) Op-1 & length
+ DC A(10*MB+(13*K32)-3),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(13*K32)-3+(8-4)),A(004) OP-1
+ DC A(10*MB+(13*K32)-3+(8-4)),A(004) OP-2
+ SPACE
+* Strings with multiple equal bytes
+* subtring starts on a page boundary
+ SPACE
+SC5T8 DS 0F
+ DC X'58' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(004) Op-1 SS & length
+ DC A(COP2C),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(14*K32)-4),A(8) Op-1 & length
+ DC A(10*MB+(14*K32)-4),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(14*K32)-4+(8-7)),A(007) OP-1
+ DC A(10*MB+(14*K32)-4+(8-7)),A(007) OP-2
+ SPACE
+* subtring starts on a byte before page boundary
+ SPACE
+SC5T9 DS 0F
+ DC X'59' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(004) Op-1 SS & length
+ DC A(COP2C),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(15*K32)-5),A(8) Op-1 & length
+ DC A(10*MB+(15*K32)-5),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(15*K32)-5+(8-7)),A(007) OP-1
+ DC A(10*MB+(15*K32)-5+(8-7)),A(007) OP-2
+ SPACE
+* subtring starts on a byte after page boundary
+ SPACE
+SC5TA DS 0F
+ DC X'5A' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(004) Op-1 SS & length
+ DC A(COP2C),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(16*K32)-3),A(8) Op-1 & length
+ DC A(10*MB+(16*K32)-3),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(16*K32)-3+(8-7)),A(007) OP-1
+ DC A(10*MB+(16*K32)-3+(8-7)),A(007) OP-2
+ SPACE
+* Strings with multiple equal bytes
+* subtring starts on a page boundary
+ SPACE
+SC5TB DS 0F
+ DC X'5B' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1D),A(004) Op-1 SS & length
+ DC A(COP2D),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(17*K32)-4),A(8) Op-1 & length
+ DC A(10*MB+(17*K32)-4),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(17*K32)-4+(8-4)),A(004) OP-1
+ DC A(10*MB+(17*K32)-4+(8-4)),A(004) OP-2
+ SPACE
+* subtring starts on a byte before page boundary
+ SPACE
+SC5TC DS 0F
+ DC X'5C' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1D),A(004) Op-1 SS & length
+ DC A(COP2D),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(18*K32)-5),A(8) Op-1 & length
+ DC A(10*MB+(18*K32)-5),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(18*K32)-5+(8-4)),A(004) OP-1
+ DC A(10*MB+(18*K32)-5+(8-4)),A(004) OP-2
+ SPACE
+* subtring starts on a byte after page boundary
+ SPACE
+SC5TD DS 0F
+ DC X'5D' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'CC' First-Operand SS last byte
+ DC X'CC' Second-Operand SS last byte
+* Source
+ DC A(COP1D),A(004) Op-1 SS & length
+ DC A(COP2D),A(004) OP-2 SS & length
+* Target
+ DC A(9*MB+(19*K32)-3),A(8) Op-1 & length
+ DC A(10*MB+(19*K32)-3),A(8) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(9*MB+(19*K32)-3+(8-4)),A(004) OP-1
+ DC A(10*MB+(19*K32)-3+(8-4)),A(004) OP-2
+
+ EJECT
+***********************************************************************
+* potential tests for CUSE-02-performance
+***********************************************************************
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+PTE1 DS 0F
+ DC X'E1' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'EE' First-Operand SS last byte
+ DC X'EE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(11*MB+(1*K32)-63),A(512) Op-1 & length
+ DC A(12*MB+(1*K32)-56),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(11*MB+(1*K32)-63+(512-4)),A(004) OP-1
+ DC A(12*MB+(1*K32)-56+(512-4)),A(004) OP-2
+ SPACE
+PTE2 DS 0F
+ DC X'E2' Test Num
+ DC XL3'00'
+*
+ DC AL1(8) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(008) Op-1 SS & length
+ DC A(COP2A),A(008) OP-2 SS & length
+* Target
+ DC A(11*MB+(2*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(2*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(11*MB+(2*K32)+(512-8)-96),A(008) OP-1
+ DC A(12*MB+(2*K32)+(512-8)-128),A(008) OP-2
+ SPACE 2
+PTE3 DS 0F
+ DC X'E3' Test Num
+ DC XL3'00'
+*
+ DC AL1(16) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(016) Op-1 SS & length
+ DC A(COP2A),A(016) OP-2 SS & length
+* Target
+ DC A(11*MB+(3*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(3*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(11*MB+(3*K32)+(512-16)-96),A(016) OP-1
+ DC A(12*MB+(3*K32)+(512-16)-128),A(016) OP-2
+ SPACE 2
+PTE4 DS 0F
+ DC X'E4' Test Num
+ DC XL3'00'
+*
+ DC AL1(32) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(11*MB+(4*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(4*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(11*MB+(4*K32)+(512-32)-96),A(032) OP-1
+ DC A(12*MB+(4*K32)+(512-32)-128),A(032) OP-2
+ SPACE 2
+PTE5 DS 0F
+ DC X'E5' Test Num
+ DC XL3'00'
+*
+ DC AL1(64) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(064) Op-1 SS & length
+ DC A(COP2A),A(064) OP-2 SS & length
+* Target
+ DC A(11*MB+(5*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(5*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(11*MB+(5*K32)+(512-64)-96),A(064) OP-1
+ DC A(12*MB+(5*K32)+(512-64)-128),A(064) OP-2
+ SPACE 2
+PTE6 DS 0F
+ DC X'E6' Test Num
+ DC XL3'00'
+*
+ DC AL1(1) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(11*MB+(6*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(6*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(11*MB+(6*K32)+(512-32)-96),A(032) OP-1
+ DC A(12*MB+(6*K32)+(512-32)-128),A(032) OP-2
+ SPACE 2
+PTE7 DS 0F
+ DC X'E7' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(032) Op-1 SS & length
+ DC A(COP2C),A(032) OP-2 SS & length
+* Target
+ DC A(11*MB+(7*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(7*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(11*MB+(7*K32)+(512-32)-96-3),A(032+3) OP-1
+ DC A(12*MB+(7*K32)+(512-32)-128-3),A(032+3) OP-2
+ EJECT
+***********************************************************************
+* potential tests for CUSE-02-performance
+***********************************************************************
+ SPACE
+PTF1 DS 0F
+ DC X'F1' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'EE' First-Operand SS last byte
+ DC X'EE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(13*MB+(1*K32)),A(512) Op-1 & length
+ DC A(14*MB+(1*K32)),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(13*MB+(1*K32)+(512-62)),A(062) OP-1
+ DC A(14*MB+(1*K32)+(512-62)),A(062) OP-2
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+PTF2 DS 0F
+ DC X'F2' Test Num
+ DC XL3'00'
+*
+ DC AL1(32) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(13*MB+(2*K32)-96),A(512) Op-1 & length
+ DC A(14*MB+(2*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(13*MB+(2*K32)+(512-32)-96),A(032) OP-1
+ DC A(14*MB+(2*K32)+(512-32)-128),A(032) OP-2
+ SPACE 2
+PTF3 DS 0F
+ DC X'F3' Test Num
+ DC XL3'00'
+*
+ DC AL1(62) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(062) Op-1 SS & length
+ DC A(COP2A),A(062) OP-2 SS & length
+* Target
+ DC A(13*MB+(3*K32)-96),A(2048) Op-1 & length
+ DC A(14*MB+(3*K32)-128),A(2048) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(13*MB+(3*K32)+(2048-62)-96),A(062) OP-1
+ DC A(14*MB+(3*K32)+(2048-62)-128),A(062) OP-2
+ SPACE 2
+PTF4 DS 0F
+ DC X'F4' Test Num
+ DC XL3'00'
+*
+ DC AL1(32) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(13*MB+(4*K32)-96),A(4096-128) Op-1 & length
+ DC A(14*MB+(4*K32)-128),A(4096-128) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(13*MB+(4*K32)+(4096-128-32)-96),A(032) OP-1
+ DC A(14*MB+(4*K32)+(4096-128-32)-128),A(032) OP-2
+ SPACE 3
+ DC A(0) end of table
+ DC A(0) end of table
+ EJECT
+***********************************************************************
+* CUSE Operand-1 scan data...
+***********************************************************************
+ SPACE
+ DS 0F
+ DC 2048XL4'98765432'
+COP1A DC 256XL4'111111F0'
+ SPACE
+ DS 0F
+ DC 2048XL4'98765432'
+COP1B DC 256XL4'40404040'
+ SPACE
+ DS 0F
+ DC 2048XL4'11223344'
+COP1C DC 256XL4'40404040'
+ SPACE
+ DS 0F
+ DC 2048XL4'11223344'
+COP1D DC 256XL4'40404040'
+ SPACE 4
+***********************************************************************
+* CUSE Operand-2 scan data
+***********************************************************************
+ SPACE
+ DS 0F
+ DC 2048XL4'89ABCDEF'
+COP2A DC 256XL4'111111F0'
+ SPACE
+ DS 0F
+ DC 2048XL4'89ABCDEF'
+COP2B DC 256XL4'40404040'
+ SPACE
+ DS 0F
+ DC 2048XL4'FF1223344'
+COP2C DC 256XL4'40404040'
+ SPACE
+ DS 0F
+ DC 2048XL4'FF223377'
+COP2D DC 256XL4'40404040'
+ SPACE 4
+***********************************************************************
+* Register equates
+***********************************************************************
+ SPACE 2
+R0 EQU 0
+R1 EQU 1
+R2 EQU 2
+R3 EQU 3
+R4 EQU 4
+R5 EQU 5
+R6 EQU 6
+R7 EQU 7
+R8 EQU 8
+R9 EQU 9
+R10 EQU 10
+R11 EQU 11
+R12 EQU 12
+R13 EQU 13
+R14 EQU 14
+R15 EQU 15
+ SPACE 2
+ END
diff --git a/tests/CUSE-01-basic.core b/tests/CUSE-01-basic.core
new file mode 100644
index 000000000..3cfab1aa5
Binary files /dev/null and b/tests/CUSE-01-basic.core differ
diff --git a/tests/CUSE-01-basic.list b/tests/CUSE-01-basic.list
new file mode 100644
index 000000000..60a8dcd3f
--- /dev/null
+++ b/tests/CUSE-01-basic.list
@@ -0,0 +1,2510 @@
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 1
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 2 ***********************************************************************
+ 3 *
+ 4 * CUSE basic instruction tests
+ 5 *
+ 6 ***********************************************************************
+ 7 *
+ 8 * This program tests proper functioning of the CUSE instruction.
+ 9 * Specification Exceptions are not tested.
+ 10 *
+ 11 * PLEASE NOTE that the tests are very SIMPLE TESTS designed to catch
+ 12 * obvious coding errors. None of the tests are thorough. They are
+ 13 * NOT designed to test all aspects of the instruction.
+ 14 *
+ 15 * NOTE: This test is based on the CLCL-et-al Test but modified to
+ 16 * only test the CUSE instruction. -- James Wekel November 2022
+ 17 *
+ 18 ***********************************************************************
+ 19 *
+ 20 * Example Hercules Testcase:
+ 21 *
+ 22 *
+ 23 * *Testcase CUSE-01-basic (Test CUSE instructions)
+ 24 *
+ 25 * # ------------------------------------------------------------
+ 26 * # This tests only the basic function of the CUSE instruction.
+ 27 * # Specification Exceptions are NOT tested.
+ 28 * # ------------------------------------------------------------
+ 29 *
+ 30 * mainsize 16
+ 31 * numcpu 1
+ 32 * sysclear
+ 33 * archlvl z/Arch
+ 34 * loadcore "$(testpath)/CUSE-01-basic.core" 0x0
+ 35 * runtest 1
+ 36 * *Done
+ 37 *
+ 38 *
+ 39 ***********************************************************************
+
+
+ 00000000 0001380B 41 CUSE1TST START 0
+00000000 00000000 42 USING CUSE1TST,R0 Low core addressability
+
+
+00000000 00000000 000001A0 44 ORG CUSE1TST+X'1A0' z/Architecure RESTART PSW
+000001A0 00000001 80000000 45 DC X'0000000180000000'
+000001A8 00000000 00000200 46 DC AD(BEGIN)
+
+
+000001B0 000001B0 000001D0 48 ORG CUSE1TST+X'1D0' z/Architecure PROGRAM CHECK PSW
+000001D0 00020001 80000000 49 DC X'0002000180000000'
+000001D8 00000000 0000DEAD 50 DC AD(X'DEAD')
+
+
+
+000001E0 000001E0 00000200 52 ORG CUSE1TST+X'200' Start of actual test program...
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 2
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 54 ***********************************************************************
+ 55 * The actual "CUSE1TST" program itself...
+ 56 ***********************************************************************
+ 57 *
+ 58 * Architecture Mode: z/Arch
+ 59 * Register Usage:
+ 60 *
+ 61 * R0 CUSE - SS length
+ 62 * R1 CUSE - Pad byte
+ 63 * R2 CUSE - First-Operand Address
+ 64 * R3 CUSE - First-Operand Length
+ 65 * R4 CUSE - Second-Operand Address
+ 66 * R5 CUSE - Second-Operand Length
+ 67 * R6 Testing control table - base current entry
+ 68 * R7 (work)
+ 69 * R8 First base register
+ 70 * R9 Second base register
+ 71 * R10-R13 (work)
+ 72 * R14 Subroutine call
+ 73 * R15 Secondary Subroutine call or work
+ 74 *
+ 75 ***********************************************************************
+
+00000200 00000200 77 USING BEGIN,R8 FIRST Base Register
+00000200 00001200 78 USING BEGIN+4096,R9 SECOND Base Register
+
+00000200 0580 80 BEGIN BALR R8,0 Initalize FIRST base register
+00000202 0680 81 BCTR R8,0 Initalize FIRST base register
+00000204 0680 82 BCTR R8,0 Initalize FIRST base register
+
+00000206 4190 8800 00000800 84 LA R9,2048(,R8) Initalize SECOND base register
+0000020A 4190 9800 00000800 85 LA R9,2048(,R9) Initalize SECOND base register
+
+
+ 87 ***********************************************************************
+ 88 * Run the test(s)...
+ 89 ***********************************************************************
+
+0000020E 45E0 8302 00000502 91 BAL R14,TEST01 Test CUSE instruction
+
+
+ 93 ***********************************************************************
+ 94 * Test for normal or unexpected test completion...
+ 95 ***********************************************************************
+
+00000212 95F4 8200 00000400 97 CLI TESTNUM,X'F4' Did we end on expected test?
+00000216 4770 83F0 000005F0 98 BNE FAILTEST No?! Then FAIL the test!
+
+0000021A 9504 8201 00000401 100 CLI SUBTEST,X'04' Did we end on expected SUB-test?
+0000021E 4770 83F0 000005F0 101 BNE FAILTEST No?! Then FAIL the test!
+
+00000222 47F0 83D8 000005D8 103 B EOJ Yes, then normal completion!
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 3
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 105 ***********************************************************************
+ 106 * Fixed test storage locations ...
+ 107 ***********************************************************************
+
+
+00000226 00000226 00000400 109 ORG CUSE1TST+X'400'
+
+
+
+
+00000400 111 TESTADDR DS 0D Where test/subtest numbers will go
+00000400 99 112 TESTNUM DC X'99' Test number of active test
+00000401 99 113 SUBTEST DC X'99' Active test sub-test number
+
+
+
+
+00000402 00000402 00000502 115 ORG *+X'100'
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 4
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 117 ***********************************************************************
+ 118 * TEST01 Test CUSE instruction
+ 119 ***********************************************************************
+
+00000502 9201 8200 00000400 121 TEST01 MVI TESTNUM,X'01'
+
+00000506 4160 83F8 000005F8 123 LA R6,CUSECTL Point R6 --> testing control table
+0000050A 00000000 124 USING CUSETEST,R6 What each table entry looks like
+
+ 0000050A 00000001 126 TST1LOOP EQU *
+0000050A 43A0 6000 00000000 127 IC R10,TNUM Set test number
+0000050E 42A0 8200 00000400 128 STC R10,TESTNUM
+ 129 *
+ 130 ** Initialize operand data (move data to testing address)
+ 131 *
+ 132 * Build Operand-1
+
+00000512 5820 6018 00000018 134 L R2,OP1WHERE Where to move operand-1 data to
+00000516 5830 601C 0000001C 135 L R3,OP1LEN Get operand-1 length
+0000051A 58A0 6008 00000008 136 L R10,SS1ADDR Calculate OP 1 starting
+0000051E 1BA3 137 SR R10,R3 address
+00000520 5AA0 600C 0000000C 138 A R10,SS1LEN
+00000524 58B0 601C 0000001C 139 L R11,OP1LEN
+00000528 0E2A 140 MVCL R2,R10
+
+0000052A 0620 142 BCTR R2,0 less one for last char addr
+0000052C D200 2000 6006 00000000 00000006 143 MVC 0(0,R2),SS1LAST set last char
+
+ 145 * Build Operand-2
+
+00000532 5840 6020 00000020 147 L R4,OP2WHERE Where to move operand-1 data to
+00000536 5850 6024 00000024 148 L R5,OP2LEN Get operand-1 length
+0000053A 58A0 6010 00000010 149 L R10,SS2ADDR Calculate OP 2 starting
+0000053E 1BA5 150 SR R10,R5 address
+00000540 5AA0 6014 00000014 151 A R10,SS2LEN
+00000544 58B0 6024 00000024 152 L R11,OP2LEN
+00000548 0E4A 153 MVCL R4,R10
+
+0000054A 0640 155 BCTR R4,0 less one for last char addr
+0000054C D200 4000 6007 00000000 00000007 156 MVC 0(0,R4),SS2LAST set last char
+
+
+ 158 ** Execute CUSE instruction and check for expected condition code
+
+00000552 58B0 6028 00000028 160 L R11,FAILMASK (failure CC)
+00000556 89B0 0004 00000004 161 SLL R11,4 (shift to BC instr CC position)
+
+0000055A 4300 6004 00000004 163 IC R0,SSLEN Set SS length
+0000055E 4310 6005 00000005 164 IC R1,PAD Set SS Pad byte
+
+00000562 9825 6018 00000018 166 LM R2,R5,OPSWHERE
+
+00000566 9200 8201 00000401 168 MVI SUBTEST,X'00' (primary test)
+0000056A B257 0024 169 DOAGAIN CUSE R2,R4 Do Test
+
+0000056E 44B0 83BE 000005BE 171 EX R11,CUSEBC fail if...
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 5
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000572 4710 836A 0000056A 172 BC B'0001',DOAGAIN cc=3, not finished
+
+
+ 174 *
+ 175 ** Verify R2,R3,R4,R5 contain (or still contain!) expected values
+ 176 *
+00000576 98AB 602C 0000002C 177 LM R10,R11,ENDOP1 end OP-1 address and length
+
+0000057A 9201 8201 00000401 179 MVI SUBTEST,X'01' (R2 result - op1 found addr)
+0000057E 152A 180 CLR R2,R10 R2 correct?
+00000580 4770 83B8 000005B8 181 BNE CUSEFAIL No, FAILTEST!
+
+00000584 9202 8201 00000401 183 MVI SUBTEST,X'02' (R3 result - op1 remaining len)
+00000588 153B 184 CLR R3,R11 R3 correct
+0000058A 4770 83B8 000005B8 185 BNE CUSEFAIL No, FAILTEST!
+
+0000058E 98AB 6034 00000034 187 LM R10,R11,ENDOP2 end OP-2 address and length
+
+00000592 9203 8201 00000401 189 MVI SUBTEST,X'03' (R4 result - op2 found addr)
+00000596 154A 190 CLR R4,R10 R4 correct
+00000598 4770 83B8 000005B8 191 BNE CUSEFAIL No, FAILTEST!
+
+0000059C 9204 8201 00000401 193 MVI SUBTEST,X'04' (R3 result - op2 remaining len)
+000005A0 155B 194 CLR R5,R11 R5 correct
+000005A2 4770 83B8 000005B8 195 BNE CUSEFAIL No, FAILTEST!
+
+000005A6 4160 603C 0000003C 197 LA R6,CUSENEXT Go on to next table entry
+000005AA D503 83F4 6000 000005F4 00000000 198 CLC =F'0',0(R6) End of table?
+000005B0 4770 830A 0000050A 199 BNE TST1LOOP No, loop...
+000005B4 47F0 83BC 000005BC 200 B CUSEDONE Done! (success!)
+
+
+000005B8 41E0 83F0 000005F0 202 CUSEFAIL LA R14,FAILTEST Unexpected results!
+000005BC 07FE 203 CUSEDONE BR R14 Return to caller or FAILTEST
+
+
+000005BE 4700 83B8 000005B8 205 CUSEBC BC 0,CUSEFAIL (fail if unexpected condition code)
+
+
+000005C2 207 DROP R6
+000005C2 208 DROP R15
+000005C2 00000200 209 USING BEGIN,R8
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 6
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 211 ***********************************************************************
+ 212 * Normal completion or Abnormal termination PSWs
+ 213 ***********************************************************************
+
+
+
+
+
+000005C8 00020001 80000000 215 EOJPSW DC 0D'0',X'0002000180000000',AD(0)
+
+000005D8 B2B2 83C8 000005C8 217 EOJ LPSWE EOJPSW Normal completion
+
+
+
+
+
+000005E0 00020001 80000000 219 FAILPSW DC 0D'0',X'0002000180000000',AD(X'BAD')
+
+000005F0 B2B2 83E0 000005E0 221 FAILTEST LPSWE FAILPSW Abnormal termination
+
+
+
+
+
+
+
+ 223 ***********************************************************************
+ 224 * Working Storage
+ 225 ***********************************************************************
+
+
+000005F4 227 LTORG , Literals pool
+000005F4 00000000 228 =F'0'
+
+
+
+ 00000400 00000001 230 K EQU 1024 One KB
+ 00001000 00000001 231 PAGE EQU (4*K) Size of one page
+ 00001000 00000001 232 K4 EQU (4*K) 4 KB
+ 00008000 00000001 233 K32 EQU (32*K) 32 KB
+ 00010000 00000001 234 K64 EQU (64*K) 64 KB
+ 00100000 00000001 235 MB EQU (K*K) 1 MB
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 7
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 00000000 0001380B 237 CUSE1TST CSECT ,
+
+
+ 239 ***********************************************************************
+ 240 * CUSETEST DSECT
+ 241 ***********************************************************************
+
+
+ 243 CUSETEST DSECT ,
+00000000 00 244 TNUM DC X'00' CUSE table number
+00000001 000000 245 DC XL3'00'
+
+
+00000004 00 247 SSLEN DC AL1(0) CUSE - SS length
+00000005 00 248 PAD DC X'00' CUSE - Pad byte
+00000006 00 249 SS1LAST DC X'00' First-Operand SS last byte
+00000007 00 250 SS2LAST DC X'00' Second-Operand SS last byte
+
+
+00000008 00000000 252 SS1ADDR DC A(0) First-Operand SS Address
+0000000C 00000000 253 SS1LEN DC A(0) First-Operand SS length
+00000010 00000000 254 SS2ADDR DC A(0) Second-Operand SS Address
+00000014 00000000 255 SS2LEN DC A(0) Second-Operand SS length
+
+
+ 00000018 00000001 257 OPSWHERE EQU *
+00000018 00000000 258 OP1WHERE DC A(0) Where Operand-1 data should be placed
+0000001C 00000000 259 OP1LEN DC F'0' CUSE - First-Operand Length
+00000020 00000000 260 OP2WHERE DC A(0) Where Operand-2 data should be placed
+00000024 00000000 261 OP2LEN DC F'0' CUSE - Second-Operand Length
+ 262
+
+
+00000028 00000000 264 FAILMASK DC A(0) Failure Branch on Condition mask
+
+
+ 266 * Ending register values
+0000002C 00000000 267 ENDOP1 DC A(0) Operand 1 address
+00000030 00000000 268 DC A(0) Operand 1 length
+00000034 00000000 269 ENDOP2 DC A(0) Operand 2 address
+00000038 00000000 270 DC A(0) Operand 2 length
+
+
+ 0000003C 00000001 272 CUSENEXT EQU * Start of next table entry...
+
+
+
+
+
+ AABBCCDD 00000001 274 REG2PATT EQU X'AABBCCDD' Polluted Register pattern
+ 000000DD 00000001 275 REG2LOW EQU X'DD' (last byte above)
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 8
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 277 ***********************************************************************
+ 278 * CUSE Testing Control tables (ref: CUSETEST DSECT)
+ 279 ***********************************************************************
+
+ 00000000 0001380B 281 CUSE1TST CSECT ,
+000005F8 282 CUSECTL DC 0A(0) start of table
+
+ 284 ***********************************************************************
+ 285 * tests with CC=0
+ 286 ***********************************************************************
+
+000005F8 288 CC0T1 DS 0F
+000005F8 01 289 DC X'01' Test Num
+000005F9 000000 290 DC XL3'00'
+ 291 *
+000005FC 01 292 DC AL1(1) SS Length
+000005FD 00 293 DC X'00' Pad Byte
+000005FE AA 294 DC X'AA' First-Operand SS last byte
+000005FF AA 295 DC X'AA' Second-Operand SS last byte
+ 296 * Source
+00000600 0000380C 00000001 297 DC A(COP1A),A(001) Op-1 SS & length
+00000608 0000C80C 00000001 298 DC A(COP2A),A(001) OP-2 SS & length
+ 299 * Target
+00000610 00108000 00000001 300 DC A(1*MB+(1*K32)),A(1) Op-1 & length
+00000618 00208000 00000001 301 DC A(2*MB+(1*K32)),A(1) Op-2 & length
+ 302 *
+00000620 00000007 303 DC A(7) CC0 Fail mask
+ 304 * Ending register values
+00000624 00108000 00000001 305 DC A(1*MB+(1*K32)+000),A(001) OP-1
+0000062C 00208000 00000001 306 DC A(2*MB+(1*K32)+000),A(001) OP-2
+
+
+00000634 308 CC0T2 DS 0F
+00000634 02 309 DC X'02' Test Num
+00000635 000000 310 DC XL3'00'
+ 311 *
+00000638 01 312 DC AL1(1) SS Length
+00000639 00 313 DC X'00' Pad Byte
+0000063A BB 314 DC X'BB' First-Operand SS last byte
+0000063B BB 315 DC X'BB' Second-Operand SS last byte
+ 316 * Source
+0000063C 0000380C 00000001 317 DC A(COP1A),A(001) Op-1 SS & length
+00000644 0000C80C 00000001 318 DC A(COP2A),A(001) OP-2 SS & length
+ 319 * Target
+0000064C 00110000 00000002 320 DC A(1*MB+(2*K32)),A(2) Op-1 & length
+00000654 00210000 00000002 321 DC A(2*MB+(2*K32)),A(2) Op-2 & length
+ 322 *
+0000065C 00000007 323 DC A(7) CC0 Fail mask
+ 324 * Ending register values
+00000660 00110001 00000001 325 DC A(1*MB+(2*K32)+001),A(001) OP-1
+00000668 00210001 00000001 326 DC A(2*MB+(2*K32)+001),A(001) OP-2
+
+
+00000670 328 CC0T3 DS 0F
+00000670 03 329 DC X'03' Test Num
+00000671 000000 330 DC XL3'00'
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 9
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 331 *
+00000674 04 332 DC AL1(4) SS Length
+00000675 00 333 DC X'00' Pad Byte
+00000676 CC 334 DC X'CC' First-Operand SS last byte
+00000677 CC 335 DC X'CC' Second-Operand SS last byte
+ 336 * Source
+00000678 0000380C 00000004 337 DC A(COP1A),A(004) Op-1 SS & length
+00000680 0000C80C 00000004 338 DC A(COP2A),A(004) OP-2 SS & length
+ 339 * Target
+00000688 00118000 00000008 340 DC A(1*MB+(3*K32)),A(8) Op-1 & length
+00000690 00218000 00000008 341 DC A(2*MB+(3*K32)),A(8) Op-2 & length
+ 342 *
+00000698 00000007 343 DC A(7) CC0 Fail mask
+ 344 * Ending register values
+0000069C 00118004 00000004 345 DC A(1*MB+(3*K32)+(8-4)),A(004) OP-1
+000006A4 00218004 00000004 346 DC A(2*MB+(3*K32)+(8-4)),A(004) OP-2
+
+
+000006AC 348 CC0T4 DS 0F
+000006AC 04 349 DC X'04' Test Num
+000006AD 000000 350 DC XL3'00'
+ 351 *
+000006B0 0D 352 DC AL1(13) SS Length
+000006B1 00 353 DC X'00' Pad Byte
+000006B2 DD 354 DC X'DD' First-Operand SS last byte
+000006B3 DD 355 DC X'DD' Second-Operand SS last byte
+ 356 * Source
+000006B4 0000380C 0000000D 357 DC A(COP1A),A(013) Op-1 SS & length
+000006BC 0000C80C 0000000D 358 DC A(COP2A),A(013) OP-2 SS & length
+ 359 * Target
+000006C4 00120000 0000003F 360 DC A(1*MB+(4*K32)),A(63) Op-1 & length
+000006CC 00220000 0000003F 361 DC A(2*MB+(4*K32)),A(63) Op-2 & length
+ 362 *
+000006D4 00000007 363 DC A(7) CC0 Fail mask
+ 364 * Ending register values
+000006D8 00120032 0000000D 365 DC A(1*MB+(4*K32)+(63-13)),A(013) OP-1
+000006E0 00220032 0000000D 366 DC A(2*MB+(4*K32)+(63-13)),A(013) OP-2
+
+
+000006E8 368 CC0T5 DS 0F
+000006E8 05 369 DC X'05' Test Num
+000006E9 000000 370 DC XL3'00'
+ 371 *
+000006EC 3E 372 DC AL1(62) SS Length
+000006ED 00 373 DC X'00' Pad Byte
+000006EE EE 374 DC X'EE' First-Operand SS last byte
+000006EF EE 375 DC X'EE' Second-Operand SS last byte
+ 376 * Source
+000006F0 0000380C 0000003E 377 DC A(COP1A),A(062) Op-1 SS & length
+000006F8 0000C80C 0000003E 378 DC A(COP2A),A(062) OP-2 SS & length
+ 379 * Target
+00000700 00128000 00000200 380 DC A(1*MB+(5*K32)),A(512) Op-1 & length
+00000708 00228000 00000200 381 DC A(2*MB+(5*K32)),A(512) Op-2 & length
+ 382 *
+00000710 00000007 383 DC A(7) CC0 Fail mask
+ 384 * Ending register values
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 10
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000714 001281C2 0000003E 385 DC A(1*MB+(5*K32)+(512-62)),A(062) OP-1
+0000071C 002281C2 0000003E 386 DC A(2*MB+(5*K32)+(512-62)),A(062) OP-2
+
+
+00000724 388 CC0T6 DS 0F
+00000724 06 389 DC X'06' Test Num
+00000725 000000 390 DC XL3'00'
+ 391 *
+00000728 7F 392 DC AL1(127) SS Length
+00000729 00 393 DC X'00' Pad Byte
+0000072A FF 394 DC X'FF' First-Operand SS last byte
+0000072B FF 395 DC X'FF' Second-Operand SS last byte
+ 396 * Source
+0000072C 0000380C 0000007F 397 DC A(COP1A),A(127) Op-1 SS & length
+00000734 0000C80C 0000007F 398 DC A(COP2A),A(127) OP-2 SS & length
+ 399 * Target
+0000073C 00130000 00000800 400 DC A(1*MB+(6*K32)),A(2048) Op-1 & length
+00000744 00230000 00000800 401 DC A(2*MB+(6*K32)),A(2048) Op-2 & length
+ 402 *
+0000074C 00000007 403 DC A(7) CC0 Fail mask
+ 404 * Ending register values
+00000750 00130781 0000007F 405 DC A(1*MB+(6*K32)+(2048-127)),A(127) OP-1
+00000758 00230781 0000007F 406 DC A(2*MB+(6*K32)+(2048-127)),A(127) OP-2
+
+ 408 * Cross page bounday tests
+
+ 410 * Cross page bounday - operand-1
+
+00000760 412 CC0T7 DS 0F
+00000760 07 413 DC X'07' Test Num
+00000761 000000 414 DC XL3'00'
+ 415 *
+00000764 3E 416 DC AL1(62) SS Length
+00000765 00 417 DC X'00' Pad Byte
+00000766 55 418 DC X'55' First-Operand SS last byte
+00000767 55 419 DC X'55' Second-Operand SS last byte
+ 420 * Source
+00000768 0000380C 0000003E 421 DC A(COP1A),A(062) Op-1 SS & length
+00000770 0000C80C 0000003E 422 DC A(COP2A),A(062) OP-2 SS & length
+ 423 * Target
+00000778 00137F80 00000200 424 DC A(1*MB+(7*K32)-128),A(512) Op-1 & length
+00000780 00238000 00000200 425 DC A(2*MB+(7*K32)),A(512) Op-2 & length
+ 426 *
+00000788 00000007 427 DC A(7) CC0 Fail mask
+ 428 * Ending register values
+0000078C 00138142 0000003E 429 DC A(1*MB+(7*K32)+(512-62)-128),A(062) OP-1
+00000794 002381C2 0000003E 430 DC A(2*MB+(7*K32)+(512-62)),A(062) OP-2
+
+ 432 * Cross page bounday - operand-2
+
+0000079C 434 CC0T8 DS 0F
+0000079C 08 435 DC X'08' Test Num
+0000079D 000000 436 DC XL3'00'
+ 437 *
+000007A0 3E 438 DC AL1(62) SS Length
+000007A1 00 439 DC X'00' Pad Byte
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 11
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+000007A2 66 440 DC X'66' First-Operand SS last byte
+000007A3 66 441 DC X'66' Second-Operand SS last byte
+ 442 * Source
+000007A4 0000380C 0000003E 443 DC A(COP1A),A(062) Op-1 SS & length
+000007AC 0000C80C 0000003E 444 DC A(COP2A),A(062) OP-2 SS & length
+ 445 * Target
+000007B4 00140000 00000200 446 DC A(1*MB+(8*K32)),A(512) Op-1 & length
+000007BC 0023FF80 00000200 447 DC A(2*MB+(8*K32)-128),A(512) Op-2 & length
+ 448 *
+000007C4 00000007 449 DC A(7) CC0 Fail mask
+ 450 * Ending register values
+000007C8 001401C2 0000003E 451 DC A(1*MB+(8*K32)+(512-62)),A(062) OP-1
+000007D0 00240142 0000003E 452 DC A(2*MB+(8*K32)+(512-62)-128),A(062) OP-2
+
+ 454 * Cross page bounday - operand-1 and operand-2
+
+000007D8 456 CC0T9 DS 0F
+000007D8 09 457 DC X'09' Test Num
+000007D9 000000 458 DC XL3'00'
+ 459 *
+000007DC 3E 460 DC AL1(62) SS Length
+000007DD 00 461 DC X'00' Pad Byte
+000007DE 77 462 DC X'77' First-Operand SS last byte
+000007DF 77 463 DC X'77' Second-Operand SS last byte
+ 464 * Source
+000007E0 0000380C 0000003E 465 DC A(COP1A),A(062) Op-1 SS & length
+000007E8 0000C80C 0000003E 466 DC A(COP2A),A(062) OP-2 SS & length
+ 467 * Target
+000007F0 00147FA0 00000200 468 DC A(1*MB+(9*K32)-96),A(512) Op-1 & length
+000007F8 00247F80 00000200 469 DC A(2*MB+(9*K32)-128),A(512) Op-2 & length
+ 470 *
+00000800 00000007 471 DC A(7) CC0 Fail mask
+ 472 * Ending register values
+00000804 00148162 0000003E 473 DC A(1*MB+(9*K32)+(512-62)-96),A(062) OP-1
+0000080C 00248142 0000003E 474 DC A(2*MB+(9*K32)+(512-62)-128),A(062) OP-2
+
+ 476 * PAD tests
+
+ 478 * Pad - operand-1
+
+00000814 480 CC0TA DS 0F
+00000814 0A 481 DC X'0A' Test Num
+00000815 000000 482 DC XL3'00'
+ 483 *
+00000818 3E 484 DC AL1(62) SS Length
+00000819 40 485 DC X'40' Pad Byte
+0000081A 40 486 DC X'40' First-Operand SS last byte
+0000081B 40 487 DC X'40' Second-Operand SS last byte
+ 488 * Source
+0000081C 00005C0C 0000003E 489 DC A(COP1B),A(062) Op-1 SS & length
+00000824 0000EC0C 0000003E 490 DC A(COP2B),A(062) OP-2 SS & length
+ 491 * Target
+0000082C 00150000 000001F4 492 DC A(1*MB+(10*K32)),A(500) Op-1 & length
+00000834 00250000 00000200 493 DC A(2*MB+(10*K32)),A(512) Op-2 & length
+ 494 *
+0000083C 00000007 495 DC A(7) CC0 Fail mask
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 12
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 496 * Ending register values
+00000840 001501C2 00000032 497 DC A(1*MB+(10*K32)+(512-62)),A(062-(512-500)) OP-1
+00000848 002501C2 0000003E 498 DC A(2*MB+(10*K32)+(512-62)),A(062) OP-2
+
+ 500 * Pad - operand-2
+
+00000850 502 CC0TB DS 0F
+00000850 0B 503 DC X'0B' Test Num
+00000851 000000 504 DC XL3'00'
+ 505 *
+00000854 3E 506 DC AL1(62) SS Length
+00000855 40 507 DC X'40' Pad Byte
+00000856 40 508 DC X'40' First-Operand SS last byte
+00000857 40 509 DC X'40' Second-Operand SS last byte
+ 510 * Source
+00000858 00005C0C 0000003E 511 DC A(COP1B),A(062) Op-1 SS & length
+00000860 0000EC0C 0000003E 512 DC A(COP2B),A(062) OP-2 SS & length
+ 513 * Target
+00000868 00158000 00000200 514 DC A(1*MB+(11*K32)),A(512) Op-1 & length
+00000870 00258000 000001F4 515 DC A(2*MB+(11*K32)),A(500) Op-2 & length
+ 516 *
+00000878 00000007 517 DC A(7) CC0 Fail mask
+ 518 * Ending register values
+0000087C 001581C2 0000003E 519 DC A(1*MB+(11*K32)+(512-62)),A(062) OP-1
+00000884 002581C2 00000032 520 DC A(2*MB+(11*K32)+(512-62)),A(062-(512-500)) OP-2
+
+ 522 * PAD and Cross page bounday tests
+
+ 524 * Pad - operand-1 ; Cross page bounday - operand-1
+
+0000088C 526 CC0TC DS 0F
+0000088C 0C 527 DC X'0C' Test Num
+0000088D 000000 528 DC XL3'00'
+ 529 *
+00000890 3E 530 DC AL1(62) SS Length
+00000891 40 531 DC X'40' Pad Byte
+00000892 40 532 DC X'40' First-Operand SS last byte
+00000893 40 533 DC X'40' Second-Operand SS last byte
+ 534 * Source
+00000894 00005C0C 0000003E 535 DC A(COP1B),A(062) Op-1 SS & length
+0000089C 0000EC0C 0000003E 536 DC A(COP2B),A(062) OP-2 SS & length
+ 537 * Target
+000008A4 0015FFA0 000001F4 538 DC A(1*MB+(12*K32)-96),A(500) Op-1 & length
+000008AC 00260000 00000200 539 DC A(2*MB+(12*K32)),A(512) Op-2 & length
+ 540 *
+000008B4 00000007 541 DC A(7) CC0 Fail mask
+ 542 * Ending register values
+000008B8 00160162 00000032 543 DC A(1*MB+(12*K32)+(512-62)-96),A(062-(512-500)) OP-1
+000008C0 002601C2 0000003E 544 DC A(2*MB+(12*K32)+(512-62)),A(062) OP-2
+
+ 546 * Pad - operand-1 ; Cross page bounday - operand-2
+
+000008C8 548 CC0TD DS 0F
+000008C8 0D 549 DC X'0D' Test Num
+000008C9 000000 550 DC XL3'00'
+ 551 *
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 13
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+000008CC 3E 552 DC AL1(62) SS Length
+000008CD 40 553 DC X'40' Pad Byte
+000008CE 40 554 DC X'40' First-Operand SS last byte
+000008CF 40 555 DC X'40' Second-Operand SS last byte
+ 556 * Source
+000008D0 00005C0C 0000003E 557 DC A(COP1B),A(062) Op-1 SS & length
+000008D8 0000EC0C 0000003E 558 DC A(COP2B),A(062) OP-2 SS & length
+ 559 * Target
+000008E0 00168000 000001F4 560 DC A(1*MB+(13*K32)),A(500) Op-1 & length
+000008E8 00267FA0 00000200 561 DC A(2*MB+(13*K32)-96),A(512) Op-2 & length
+ 562 *
+000008F0 00000007 563 DC A(7) CC0 Fail mask
+ 564 * Ending register values
+000008F4 001681C2 00000032 565 DC A(1*MB+(13*K32)+(512-62)),A(062-(512-500)) OP-1
+000008FC 00268162 0000003E 566 DC A(2*MB+(13*K32)+(512-62)-96),A(062) OP-2
+
+ 568 * Pad - operand-2 ; Cross page bounday - operand-1
+
+00000904 570 CC0TE DS 0F
+00000904 0E 571 DC X'0E' Test Num
+00000905 000000 572 DC XL3'00'
+ 573 *
+00000908 3E 574 DC AL1(62) SS Length
+00000909 40 575 DC X'40' Pad Byte
+0000090A 40 576 DC X'40' First-Operand SS last byte
+0000090B 40 577 DC X'40' Second-Operand SS last byte
+ 578 * Source
+0000090C 00005C0C 0000003E 579 DC A(COP1B),A(062) Op-1 SS & length
+00000914 0000EC0C 0000003E 580 DC A(COP2B),A(062) OP-2 SS & length
+ 581 * Target
+0000091C 0016FFA0 00000200 582 DC A(1*MB+(14*K32)-96),A(512) Op-1 & length
+00000924 00270000 000001F4 583 DC A(2*MB+(14*K32)),A(500) Op-2 & length
+ 584 *
+0000092C 00000007 585 DC A(7) CC0 Fail mask
+ 586 * Ending register values
+00000930 00170162 0000003E 587 DC A(1*MB+(14*K32)+(512-62)-96),A(062) OP-1
+00000938 002701C2 00000032 588 DC A(2*MB+(14*K32)+(512-62)),A(062-(512-500)) OP-2
+
+ 590 * Pad - operand-2 ; Cross page bounday - operand-2
+
+00000940 592 CC0TF DS 0F
+00000940 0F 593 DC X'0F' Test Num
+00000941 000000 594 DC XL3'00'
+ 595 *
+00000944 3E 596 DC AL1(62) SS Length
+00000945 40 597 DC X'40' Pad Byte
+00000946 40 598 DC X'40' First-Operand SS last byte
+00000947 40 599 DC X'40' Second-Operand SS last byte
+ 600 * Source
+00000948 00005C0C 0000003E 601 DC A(COP1B),A(062) Op-1 SS & length
+00000950 0000EC0C 0000003E 602 DC A(COP2B),A(062) OP-2 SS & length
+ 603 * Target
+00000958 00178000 00000200 604 DC A(1*MB+(15*K32)),A(512) Op-1 & length
+00000960 00277FA0 000001F4 605 DC A(2*MB+(15*K32)-96),A(500) Op-2 & length
+ 606 *
+00000968 00000007 607 DC A(7) CC0 Fail mask
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 14
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 608 * Ending register values
+0000096C 001781C2 0000003E 609 DC A(1*MB+(15*K32)+(512-62)),A(062) OP-1
+00000974 00278162 00000032 610 DC A(2*MB+(15*K32)+(512-62)-96),A(062-(512-500)) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 15
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 612 ***********************************************************************
+ 613 * tests with CC=1
+ 614 ***********************************************************************
+
+0000097C 616 CC1T1 DS 0F
+0000097C 11 617 DC X'11' Test Num
+0000097D 000000 618 DC XL3'00'
+ 619 *
+00000980 04 620 DC AL1(4) SS Length
+00000981 11 621 DC X'11' Pad Byte
+00000982 11 622 DC X'11' First-Operand SS last byte
+00000983 11 623 DC X'11' Second-Operand SS last byte
+ 624 * Source
+00000984 0000380C 00000001 625 DC A(COP1A),A(001) Op-1 SS & length
+0000098C 0000C80C 00000001 626 DC A(COP2A),A(001) OP-2 SS & length
+ 627 * Target
+00000994 00308000 00000001 628 DC A(3*MB+(1*K32)),A(1) Op-1 & length
+0000099C 00408000 00000001 629 DC A(4*MB+(1*K32)),A(1) Op-2 & length
+ 630 *
+000009A4 0000000B 631 DC A(11) CC1 Fail mask
+ 632 * Ending register values
+000009A8 00308000 00000001 633 DC A(3*MB+(1*K32)+000),A(001) OP-1
+000009B0 00408000 00000001 634 DC A(4*MB+(1*K32)+000),A(001) OP-2
+
+
+000009B8 636 CC1T2 DS 0F
+000009B8 12 637 DC X'12' Test Num
+000009B9 000000 638 DC XL3'00'
+ 639 *
+000009BC 02 640 DC AL1(2) SS Length
+000009BD 00 641 DC X'00' Pad Byte
+000009BE BB 642 DC X'BB' First-Operand SS last byte
+000009BF BB 643 DC X'BB' Second-Operand SS last byte
+ 644 * Source
+000009C0 0000380C 00000001 645 DC A(COP1A),A(001) Op-1 SS & length
+000009C8 0000C80C 00000001 646 DC A(COP2A),A(001) OP-2 SS & length
+ 647 * Target
+000009D0 00310000 00000002 648 DC A(3*MB+(2*K32)),A(2) Op-1 & length
+000009D8 00410000 00000002 649 DC A(4*MB+(2*K32)),A(2) Op-2 & length
+ 650 *
+000009E0 0000000B 651 DC A(11) CC1 Fail mask
+ 652 * Ending register values
+000009E4 00310001 00000001 653 DC A(3*MB+(2*K32)+001),A(001) OP-1
+000009EC 00410001 00000001 654 DC A(4*MB+(2*K32)+001),A(001) OP-2
+
+
+000009F4 656 CC1T3 DS 0F
+000009F4 13 657 DC X'13' Test Num
+000009F5 000000 658 DC XL3'00'
+ 659 *
+000009F8 06 660 DC AL1(6) SS Length
+000009F9 00 661 DC X'00' Pad Byte
+000009FA CC 662 DC X'CC' First-Operand SS last byte
+000009FB CC 663 DC X'CC' Second-Operand SS last byte
+ 664 * Source
+000009FC 0000380C 00000004 665 DC A(COP1A),A(004) Op-1 SS & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 16
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000A04 0000C80C 00000004 666 DC A(COP2A),A(004) OP-2 SS & length
+ 667 * Target
+00000A0C 00318000 00000008 668 DC A(3*MB+(3*K32)),A(8) Op-1 & length
+00000A14 00418000 00000008 669 DC A(4*MB+(3*K32)),A(8) Op-2 & length
+ 670 *
+00000A1C 0000000B 671 DC A(11) CC1 Fail mask
+ 672 * Ending register values
+00000A20 00318004 00000004 673 DC A(3*MB+(3*K32)+(8-4)),A(004) OP-1
+00000A28 00418004 00000004 674 DC A(4*MB+(3*K32)+(8-4)),A(004) OP-2
+
+
+00000A30 676 CC1T4 DS 0F
+00000A30 14 677 DC X'14' Test Num
+00000A31 000000 678 DC XL3'00'
+ 679 *
+00000A34 12 680 DC AL1(18) SS Length
+00000A35 00 681 DC X'00' Pad Byte
+00000A36 DD 682 DC X'DD' First-Operand SS last byte
+00000A37 DD 683 DC X'DD' Second-Operand SS last byte
+ 684 * Source
+00000A38 0000380C 0000000D 685 DC A(COP1A),A(013) Op-1 SS & length
+00000A40 0000C80C 0000000D 686 DC A(COP2A),A(013) OP-2 SS & length
+ 687 * Target
+00000A48 00320000 0000003F 688 DC A(3*MB+(4*K32)),A(63) Op-1 & length
+00000A50 00420000 0000003F 689 DC A(4*MB+(4*K32)),A(63) Op-2 & length
+ 690 *
+00000A58 0000000B 691 DC A(11) CC1 Fail mask
+ 692 * Ending register values
+00000A5C 00320032 0000000D 693 DC A(3*MB+(4*K32)+(63-13)),A(013) OP-1
+00000A64 00420032 0000000D 694 DC A(4*MB+(4*K32)+(63-13)),A(013) OP-2
+
+
+00000A6C 696 CC1T5 DS 0F
+00000A6C 15 697 DC X'15' Test Num
+00000A6D 000000 698 DC XL3'00'
+ 699 *
+00000A70 40 700 DC AL1(64) SS Length
+00000A71 00 701 DC X'00' Pad Byte
+00000A72 EE 702 DC X'EE' First-Operand SS last byte
+00000A73 EE 703 DC X'EE' Second-Operand SS last byte
+ 704 * Source
+00000A74 0000380C 0000003E 705 DC A(COP1A),A(062) Op-1 SS & length
+00000A7C 0000C80C 0000003E 706 DC A(COP2A),A(062) OP-2 SS & length
+ 707 * Target
+00000A84 00328000 00000200 708 DC A(3*MB+(5*K32)),A(512) Op-1 & length
+00000A8C 00428000 00000200 709 DC A(4*MB+(5*K32)),A(512) Op-2 & length
+ 710 *
+00000A94 0000000B 711 DC A(11) CC1 Fail mask
+ 712 * Ending register values
+00000A98 003281C2 0000003E 713 DC A(3*MB+(5*K32)+(512-62)),A(062) OP-1
+00000AA0 004281C2 0000003E 714 DC A(4*MB+(5*K32)+(512-62)),A(062) OP-2
+
+
+00000AA8 716 CC1T6 DS 0F
+00000AA8 16 717 DC X'16' Test Num
+00000AA9 000000 718 DC XL3'00'
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 17
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 719 *
+00000AAC 80 720 DC AL1(128) SS Length
+00000AAD 00 721 DC X'00' Pad Byte
+00000AAE FF 722 DC X'FF' First-Operand SS last byte
+00000AAF FF 723 DC X'FF' Second-Operand SS last byte
+ 724 * Source
+00000AB0 0000380C 0000007F 725 DC A(COP1A),A(127) Op-1 SS & length
+00000AB8 0000C80C 0000007F 726 DC A(COP2A),A(127) OP-2 SS & length
+ 727 * Target
+00000AC0 00330000 00000800 728 DC A(3*MB+(6*K32)),A(2048) Op-1 & length
+00000AC8 00430000 00000800 729 DC A(4*MB+(6*K32)),A(2048) Op-2 & length
+ 730 *
+00000AD0 0000000B 731 DC A(11) CC1 Fail mask
+ 732 * Ending register values
+00000AD4 00330781 0000007F 733 DC A(3*MB+(6*K32)+(2048-127)),A(127) OP-1
+00000ADC 00430781 0000007F 734 DC A(4*MB+(6*K32)+(2048-127)),A(127) OP-2
+
+ 736 * Cross page bounday tests
+
+ 738 * Cross page bounday - operand-1
+
+00000AE4 740 CC1T7 DS 0F
+00000AE4 17 741 DC X'17' Test Num
+00000AE5 000000 742 DC XL3'00'
+ 743 *
+00000AE8 40 744 DC AL1(64) SS Length
+00000AE9 00 745 DC X'00' Pad Byte
+00000AEA 55 746 DC X'55' First-Operand SS last byte
+00000AEB 55 747 DC X'55' Second-Operand SS last byte
+ 748 * Source
+00000AEC 0000380C 0000003E 749 DC A(COP1A),A(062) Op-1 SS & length
+00000AF4 0000C80C 0000003E 750 DC A(COP2A),A(062) OP-2 SS & length
+ 751 * Target
+00000AFC 00337F80 00000200 752 DC A(3*MB+(7*K32)-128),A(512) Op-1 & length
+00000B04 00438000 00000200 753 DC A(4*MB+(7*K32)),A(512) Op-2 & length
+ 754 *
+00000B0C 0000000B 755 DC A(11) CC1 Fail mask
+ 756 * Ending register values
+00000B10 00338142 0000003E 757 DC A(3*MB+(7*K32)+(512-62)-128),A(062) OP-1
+00000B18 004381C2 0000003E 758 DC A(4*MB+(7*K32)+(512-62)),A(062) OP-2
+
+ 760 * Cross page bounday - operand-2
+
+00000B20 762 CC1T8 DS 0F
+00000B20 18 763 DC X'18' Test Num
+00000B21 000000 764 DC XL3'00'
+ 765 *
+00000B24 40 766 DC AL1(64) SS Length
+00000B25 00 767 DC X'00' Pad Byte
+00000B26 66 768 DC X'66' First-Operand SS last byte
+00000B27 66 769 DC X'66' Second-Operand SS last byte
+ 770 * Source
+00000B28 0000380C 0000003E 771 DC A(COP1A),A(062) Op-1 SS & length
+00000B30 0000C80C 0000003E 772 DC A(COP2A),A(062) OP-2 SS & length
+ 773 * Target
+00000B38 00340000 00000200 774 DC A(3*MB+(8*K32)),A(512) Op-1 & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 18
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000B40 0043FF80 00000200 775 DC A(4*MB+(8*K32)-128),A(512) Op-2 & length
+ 776 *
+00000B48 0000000B 777 DC A(11) CC1 Fail mask
+ 778 * Ending register values
+00000B4C 003401C2 0000003E 779 DC A(3*MB+(8*K32)+(512-62)),A(062) OP-1
+00000B54 00440142 0000003E 780 DC A(4*MB+(8*K32)+(512-62)-128),A(062) OP-2
+
+ 782 * Cross page bounday - operand-1 and operand-2
+
+00000B5C 784 CC1T9 DS 0F
+00000B5C 19 785 DC X'19' Test Num
+00000B5D 000000 786 DC XL3'00'
+ 787 *
+00000B60 40 788 DC AL1(64) SS Length
+00000B61 00 789 DC X'00' Pad Byte
+00000B62 77 790 DC X'77' First-Operand SS last byte
+00000B63 77 791 DC X'77' Second-Operand SS last byte
+ 792 * Source
+00000B64 0000380C 0000003E 793 DC A(COP1A),A(062) Op-1 SS & length
+00000B6C 0000C80C 0000003E 794 DC A(COP2A),A(062) OP-2 SS & length
+ 795 * Target
+00000B74 00347FA0 00000200 796 DC A(3*MB+(9*K32)-96),A(512) Op-1 & length
+00000B7C 00447F80 00000200 797 DC A(4*MB+(9*K32)-128),A(512) Op-2 & length
+ 798 *
+00000B84 0000000B 799 DC A(11) CC1 Fail mask
+ 800 * Ending register values
+00000B88 00348162 0000003E 801 DC A(3*MB+(9*K32)+(512-62)-96),A(062) OP-1
+00000B90 00448142 0000003E 802 DC A(4*MB+(9*K32)+(512-62)-128),A(062) OP-2
+
+ 804 * PAD tests
+
+ 806 * Pad - operand-1
+
+00000B98 808 CC1TA DS 0F
+00000B98 1A 809 DC X'1A' Test Num
+00000B99 000000 810 DC XL3'00'
+ 811 *
+00000B9C 40 812 DC AL1(64) SS Length
+00000B9D 40 813 DC X'40' Pad Byte
+00000B9E 40 814 DC X'40' First-Operand SS last byte
+00000B9F 40 815 DC X'40' Second-Operand SS last byte
+ 816 * Source
+00000BA0 00005C0C 0000003E 817 DC A(COP1B),A(062) Op-1 SS & length
+00000BA8 0000EC0C 0000003E 818 DC A(COP2B),A(062) OP-2 SS & length
+ 819 * Target
+00000BB0 00350000 000001F4 820 DC A(3*MB+(10*K32)),A(500) Op-1 & length
+00000BB8 00450000 00000200 821 DC A(4*MB+(10*K32)),A(512) Op-2 & length
+ 822 *
+00000BC0 0000000B 823 DC A(11) CC1 Fail mask
+ 824 * Ending register values
+00000BC4 003501C2 00000032 825 DC A(3*MB+(10*K32)+(512-62)),A(062-(512-500)) OP-1
+00000BCC 004501C2 0000003E 826 DC A(4*MB+(10*K32)+(512-62)),A(062) OP-2
+
+ 828 * Pad - operand-2
+
+00000BD4 830 CC1TB DS 0F
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 19
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000BD4 1B 831 DC X'1B' Test Num
+00000BD5 000000 832 DC XL3'00'
+ 833 *
+00000BD8 40 834 DC AL1(64) SS Length
+00000BD9 40 835 DC X'40' Pad Byte
+00000BDA 40 836 DC X'40' First-Operand SS last byte
+00000BDB 40 837 DC X'40' Second-Operand SS last byte
+ 838 * Source
+00000BDC 00005C0C 0000003E 839 DC A(COP1B),A(062) Op-1 SS & length
+00000BE4 0000EC0C 0000003E 840 DC A(COP2B),A(062) OP-2 SS & length
+ 841 * Target
+00000BEC 00358000 00000200 842 DC A(3*MB+(11*K32)),A(512) Op-1 & length
+00000BF4 00458000 000001F4 843 DC A(4*MB+(11*K32)),A(500) Op-2 & length
+ 844 *
+00000BFC 0000000B 845 DC A(11) CC1 Fail mask
+ 846 * Ending register values
+00000C00 003581C2 0000003E 847 DC A(3*MB+(11*K32)+(512-62)),A(062) OP-1
+00000C08 004581C2 00000032 848 DC A(4*MB+(11*K32)+(512-62)),A(062-(512-500)) OP-2
+
+ 850 * PAD and Cross page bounday tests
+
+ 852 * Pad - operand-1 ; Cross page bounday - operand-1
+
+00000C10 854 CC1TC DS 0F
+00000C10 1C 855 DC X'1C' Test Num
+00000C11 000000 856 DC XL3'00'
+ 857 *
+00000C14 40 858 DC AL1(64) SS Length
+00000C15 40 859 DC X'40' Pad Byte
+00000C16 40 860 DC X'40' First-Operand SS last byte
+00000C17 40 861 DC X'40' Second-Operand SS last byte
+ 862 * Source
+00000C18 00005C0C 0000003E 863 DC A(COP1B),A(062) Op-1 SS & length
+00000C20 0000EC0C 0000003E 864 DC A(COP2B),A(062) OP-2 SS & length
+ 865 * Target
+00000C28 0035FFA0 000001F4 866 DC A(3*MB+(12*K32)-96),A(500) Op-1 & length
+00000C30 00460000 00000200 867 DC A(4*MB+(12*K32)),A(512) Op-2 & length
+ 868 *
+00000C38 0000000B 869 DC A(11) CC1 Fail mask
+ 870 * Ending register values
+00000C3C 00360162 00000032 871 DC A(3*MB+(12*K32)+(512-62)-96),A(062-(512-500)) OP-1
+00000C44 004601C2 0000003E 872 DC A(4*MB+(12*K32)+(512-62)),A(062) OP-2
+
+ 874 * Pad - operand-1 ; Cross page bounday - operand-2
+
+00000C4C 876 CC1TD DS 0F
+00000C4C 1D 877 DC X'1D' Test Num
+00000C4D 000000 878 DC XL3'00'
+ 879 *
+00000C50 40 880 DC AL1(64) SS Length
+00000C51 40 881 DC X'40' Pad Byte
+00000C52 40 882 DC X'40' First-Operand SS last byte
+00000C53 40 883 DC X'40' Second-Operand SS last byte
+ 884 * Source
+00000C54 00005C0C 0000003E 885 DC A(COP1B),A(062) Op-1 SS & length
+00000C5C 0000EC0C 0000003E 886 DC A(COP2B),A(062) OP-2 SS & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 20
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 887 * Target
+00000C64 00368000 000001F4 888 DC A(3*MB+(13*K32)),A(500) Op-1 & length
+00000C6C 00467FA0 00000200 889 DC A(4*MB+(13*K32)-96),A(512) Op-2 & length
+ 890 *
+00000C74 0000000B 891 DC A(11) CC1 Fail mask
+ 892 * Ending register values
+00000C78 003681C2 00000032 893 DC A(3*MB+(13*K32)+(512-62)),A(062-(512-500)) OP-1
+00000C80 00468162 0000003E 894 DC A(4*MB+(13*K32)+(512-62)-96),A(062) OP-2
+
+ 896 * Pad - operand-2 ; Cross page bounday - operand-1
+
+00000C88 898 CC1TE DS 0F
+00000C88 1E 899 DC X'1E' Test Num
+00000C89 000000 900 DC XL3'00'
+ 901 *
+00000C8C 40 902 DC AL1(64) SS Length
+00000C8D 40 903 DC X'40' Pad Byte
+00000C8E 40 904 DC X'40' First-Operand SS last byte
+00000C8F 40 905 DC X'40' Second-Operand SS last byte
+ 906 * Source
+00000C90 00005C0C 0000003E 907 DC A(COP1B),A(062) Op-1 SS & length
+00000C98 0000EC0C 0000003E 908 DC A(COP2B),A(062) OP-2 SS & length
+ 909 * Target
+00000CA0 0036FFA0 00000200 910 DC A(3*MB+(14*K32)-96),A(512) Op-1 & length
+00000CA8 00470000 000001F4 911 DC A(4*MB+(14*K32)),A(500) Op-2 & length
+ 912 *
+00000CB0 0000000B 913 DC A(11) CC1 Fail mask
+ 914 * Ending register values
+00000CB4 00370162 0000003E 915 DC A(3*MB+(14*K32)+(512-62)-96),A(062) OP-1
+00000CBC 004701C2 00000032 916 DC A(4*MB+(14*K32)+(512-62)),A(062-(512-500)) OP-2
+
+ 918 * Pad - operand-2 ; Cross page bounday - operand-2
+
+00000CC4 920 CC1TF DS 0F
+00000CC4 1F 921 DC X'1F' Test Num
+00000CC5 000000 922 DC XL3'00'
+ 923 *
+00000CC8 40 924 DC AL1(64) SS Length
+00000CC9 40 925 DC X'40' Pad Byte
+00000CCA 40 926 DC X'40' First-Operand SS last byte
+00000CCB 40 927 DC X'40' Second-Operand SS last byte
+ 928 * Source
+00000CCC 00005C0C 0000003E 929 DC A(COP1B),A(062) Op-1 SS & length
+00000CD4 0000EC0C 0000003E 930 DC A(COP2B),A(062) OP-2 SS & length
+ 931 * Target
+00000CDC 00378000 00000200 932 DC A(3*MB+(15*K32)),A(512) Op-1 & length
+00000CE4 00477FA0 000001F4 933 DC A(4*MB+(15*K32)-96),A(500) Op-2 & length
+ 934 *
+00000CEC 0000000B 935 DC A(11) CC1 Fail mask
+ 936 * Ending register values
+00000CF0 003781C2 0000003E 937 DC A(3*MB+(15*K32)+(512-62)),A(062) OP-1
+00000CF8 00478162 00000032 938 DC A(4*MB+(15*K32)+(512-62)-96),A(062-(512-500)) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 21
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 940 ***********************************************************************
+ 941 * tests with CC=2
+ 942 ***********************************************************************
+
+00000D00 944 CC2T1 DS 0F
+00000D00 21 945 DC X'21' Test Num
+00000D01 000000 946 DC XL3'00'
+ 947 *
+00000D04 04 948 DC AL1(4) SS Length
+00000D05 11 949 DC X'11' Pad Byte
+00000D06 11 950 DC X'11' First-Operand SS last byte
+00000D07 12 951 DC X'12' Second-Operand SS last byte
+ 952 * Source
+00000D08 0000380C 00000001 953 DC A(COP1A),A(001) Op-1 SS & length
+00000D10 0000C80C 00000001 954 DC A(COP2A),A(001) OP-2 SS & length
+ 955 * Target
+00000D18 00508000 00000001 956 DC A(5*MB+(1*K32)),A(1) Op-1 & length
+00000D20 00608000 00000001 957 DC A(6*MB+(1*K32)),A(1) Op-2 & length
+ 958 *
+00000D28 0000000D 959 DC A(13) not CC2 Fail mask
+ 960 * Ending register values
+00000D2C 00508001 00000000 961 DC A(5*MB+(1*K32)+001),A(000) OP-1
+00000D34 00608001 00000000 962 DC A(6*MB+(1*K32)+001),A(000) OP-2
+
+
+00000D3C 964 CC2T2 DS 0F
+00000D3C 22 965 DC X'22' Test Num
+00000D3D 000000 966 DC XL3'00'
+ 967 *
+00000D40 02 968 DC AL1(2) SS Length
+00000D41 00 969 DC X'00' Pad Byte
+00000D42 BB 970 DC X'BB' First-Operand SS last byte
+00000D43 BC 971 DC X'BC' Second-Operand SS last byte
+ 972 * Source
+00000D44 0000380C 00000001 973 DC A(COP1A),A(001) Op-1 SS & length
+00000D4C 0000C80C 00000001 974 DC A(COP2A),A(001) OP-2 SS & length
+ 975 * Target
+00000D54 00510000 00000002 976 DC A(5*MB+(2*K32)),A(2) Op-1 & length
+00000D5C 00610000 00000002 977 DC A(6*MB+(2*K32)),A(2) Op-2 & length
+ 978 *
+00000D64 0000000D 979 DC A(13) not CC2 Fail mask
+ 980 * Ending register values
+00000D68 00510002 00000000 981 DC A(5*MB+(2*K32)+002),A(000) OP-1
+00000D70 00610002 00000000 982 DC A(6*MB+(2*K32)+002),A(000) OP-2
+
+
+00000D78 984 CC2T3 DS 0F
+00000D78 23 985 DC X'23' Test Num
+00000D79 000000 986 DC XL3'00'
+ 987 *
+00000D7C 06 988 DC AL1(6) SS Length
+00000D7D 00 989 DC X'00' Pad Byte
+00000D7E CC 990 DC X'CC' First-Operand SS last byte
+00000D7F CD 991 DC X'CD' Second-Operand SS last byte
+ 992 * Source
+00000D80 0000380C 00000004 993 DC A(COP1A),A(004) Op-1 SS & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 22
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000D88 0000C80C 00000004 994 DC A(COP2A),A(004) OP-2 SS & length
+ 995 * Target
+00000D90 00518000 00000008 996 DC A(5*MB+(3*K32)),A(8) Op-1 & length
+00000D98 00618000 00000008 997 DC A(6*MB+(3*K32)),A(8) Op-2 & length
+ 998 *
+00000DA0 0000000D 999 DC A(13) not CC2 Fail mask
+ 1000 * Ending register values
+00000DA4 00518008 00000000 1001 DC A(5*MB+(3*K32)+8),A(000) OP-1
+00000DAC 00618008 00000000 1002 DC A(6*MB+(3*K32)+8),A(000) OP-2
+
+
+00000DB4 1004 CC2T4 DS 0F
+00000DB4 24 1005 DC X'24' Test Num
+00000DB5 000000 1006 DC XL3'00'
+ 1007 *
+00000DB8 12 1008 DC AL1(18) SS Length
+00000DB9 00 1009 DC X'00' Pad Byte
+00000DBA DD 1010 DC X'DD' First-Operand SS last byte
+00000DBB DE 1011 DC X'DE' Second-Operand SS last byte
+ 1012 * Source
+00000DBC 0000380C 0000000D 1013 DC A(COP1A),A(013) Op-1 SS & length
+00000DC4 0000C80C 0000000D 1014 DC A(COP2A),A(013) OP-2 SS & length
+ 1015 * Target
+00000DCC 00520000 0000003F 1016 DC A(5*MB+(4*K32)),A(63) Op-1 & length
+00000DD4 00620000 0000003F 1017 DC A(6*MB+(4*K32)),A(63) Op-2 & length
+ 1018 *
+00000DDC 0000000D 1019 DC A(13) not CC2 Fail mask
+ 1020 * Ending register values
+00000DE0 0052003F 00000000 1021 DC A(5*MB+(4*K32)+63),A(000) OP-1
+00000DE8 0062003F 00000000 1022 DC A(6*MB+(4*K32)+63),A(000) OP-2
+
+
+00000DF0 1024 CC2T5 DS 0F
+00000DF0 25 1025 DC X'25' Test Num
+00000DF1 000000 1026 DC XL3'00'
+ 1027 *
+00000DF4 40 1028 DC AL1(64) SS Length
+00000DF5 00 1029 DC X'00' Pad Byte
+00000DF6 EE 1030 DC X'EE' First-Operand SS last byte
+00000DF7 EF 1031 DC X'EF' Second-Operand SS last byte
+ 1032 * Source
+00000DF8 0000380C 0000003E 1033 DC A(COP1A),A(062) Op-1 SS & length
+00000E00 0000C80C 0000003E 1034 DC A(COP2A),A(062) OP-2 SS & length
+ 1035 * Target
+00000E08 00528000 00000200 1036 DC A(5*MB+(5*K32)),A(512) Op-1 & length
+00000E10 00628000 00000200 1037 DC A(6*MB+(5*K32)),A(512) Op-2 & length
+ 1038 *
+00000E18 0000000D 1039 DC A(13) not CC2 Fail mask
+ 1040 * Ending register values
+00000E1C 00528200 00000000 1041 DC A(5*MB+(5*K32)+512),A(000) OP-1
+00000E24 00628200 00000000 1042 DC A(6*MB+(5*K32)+512),A(000) OP-2
+
+
+00000E2C 1044 CC2T6 DS 0F
+00000E2C 26 1045 DC X'26' Test Num
+00000E2D 000000 1046 DC XL3'00'
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 23
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1047 *
+00000E30 80 1048 DC AL1(128) SS Length
+00000E31 00 1049 DC X'00' Pad Byte
+00000E32 FF 1050 DC X'FF' First-Operand SS last byte
+00000E33 F0 1051 DC X'F0' Second-Operand SS last byte
+ 1052 * Source
+00000E34 0000380C 0000007F 1053 DC A(COP1A),A(127) Op-1 SS & length
+00000E3C 0000C80C 0000007F 1054 DC A(COP2A),A(127) OP-2 SS & length
+ 1055 * Target
+00000E44 00530000 00000800 1056 DC A(5*MB+(6*K32)),A(2048) Op-1 & length
+00000E4C 00630000 00000800 1057 DC A(6*MB+(6*K32)),A(2048) Op-2 & length
+ 1058 *
+00000E54 0000000D 1059 DC A(13) not CC2 Fail mask
+ 1060 * Ending register values
+00000E58 00530800 00000000 1061 DC A(5*MB+(6*K32)+2048),A(000) OP-1
+00000E60 00630800 00000000 1062 DC A(6*MB+(6*K32)+2048),A(000) OP-2
+
+ 1064 * Cross page bounday tests
+
+ 1066 * Cross page bounday - operand-1
+
+00000E68 1068 CC2T7 DS 0F
+00000E68 27 1069 DC X'27' Test Num
+00000E69 000000 1070 DC XL3'00'
+ 1071 *
+00000E6C 40 1072 DC AL1(64) SS Length
+00000E6D 00 1073 DC X'00' Pad Byte
+00000E6E 55 1074 DC X'55' First-Operand SS last byte
+00000E6F 56 1075 DC X'56' Second-Operand SS last byte
+ 1076 * Source
+00000E70 0000380C 0000003E 1077 DC A(COP1A),A(062) Op-1 SS & length
+00000E78 0000C80C 0000003E 1078 DC A(COP2A),A(062) OP-2 SS & length
+ 1079 * Target
+00000E80 00537F80 00000200 1080 DC A(5*MB+(7*K32)-128),A(512) Op-1 & length
+00000E88 00638000 00000200 1081 DC A(6*MB+(7*K32)),A(512) Op-2 & length
+ 1082 *
+00000E90 0000000D 1083 DC A(13) not CC2 Fail mask
+ 1084 * Ending register values
+00000E94 00538180 00000000 1085 DC A(5*MB+(7*K32)+512-128),A(000) OP-1
+00000E9C 00638200 00000000 1086 DC A(6*MB+(7*K32)+512),A(000) OP-2
+
+ 1088 * Cross page bounday - operand-2
+
+00000EA4 1090 CC2T8 DS 0F
+00000EA4 28 1091 DC X'28' Test Num
+00000EA5 000000 1092 DC XL3'00'
+ 1093 *
+00000EA8 40 1094 DC AL1(64) SS Length
+00000EA9 00 1095 DC X'00' Pad Byte
+00000EAA 67 1096 DC X'67' First-Operand SS last byte
+00000EAB 66 1097 DC X'66' Second-Operand SS last byte
+ 1098 * Source
+00000EAC 0000380C 0000003E 1099 DC A(COP1A),A(062) Op-1 SS & length
+00000EB4 0000C80C 0000003E 1100 DC A(COP2A),A(062) OP-2 SS & length
+ 1101 * Target
+00000EBC 00540000 00000200 1102 DC A(5*MB+(8*K32)),A(512) Op-1 & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 24
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000EC4 0063FF80 00000200 1103 DC A(6*MB+(8*K32)-128),A(512) Op-2 & length
+ 1104 *
+00000ECC 0000000D 1105 DC A(13) not CC2 Fail mask
+ 1106 * Ending register values
+00000ED0 00540200 00000000 1107 DC A(5*MB+(8*K32)+512),A(000) OP-1
+00000ED8 00640180 00000000 1108 DC A(6*MB+(8*K32)+512-128),A(000) OP-2
+
+ 1110 * Cross page bounday - operand-1 and operand-2
+
+00000EE0 1112 CC2T9 DS 0F
+00000EE0 29 1113 DC X'29' Test Num
+00000EE1 000000 1114 DC XL3'00'
+ 1115 *
+00000EE4 40 1116 DC AL1(64) SS Length
+00000EE5 00 1117 DC X'00' Pad Byte
+00000EE6 78 1118 DC X'78' First-Operand SS last byte
+00000EE7 77 1119 DC X'77' Second-Operand SS last byte
+ 1120 * Source
+00000EE8 0000380C 0000003E 1121 DC A(COP1A),A(062) Op-1 SS & length
+00000EF0 0000C80C 0000003E 1122 DC A(COP2A),A(062) OP-2 SS & length
+ 1123 * Target
+00000EF8 00547FA0 00000200 1124 DC A(5*MB+(9*K32)-96),A(512) Op-1 & length
+00000F00 00647F80 00000200 1125 DC A(6*MB+(9*K32)-128),A(512) Op-2 & length
+ 1126 *
+00000F08 0000000D 1127 DC A(13) not CC2 Fail mask
+ 1128 * Ending register values
+00000F0C 005481A0 00000000 1129 DC A(5*MB+(9*K32)+512-96),A(000) OP-1
+00000F14 00648180 00000000 1130 DC A(6*MB+(9*K32)+512-128),A(000) OP-2
+
+ 1132 * PAD tests
+
+ 1134 * Pad - operand-1
+
+00000F1C 1136 CC2TA DS 0F
+00000F1C 2A 1137 DC X'2A' Test Num
+00000F1D 000000 1138 DC XL3'00'
+ 1139 *
+00000F20 40 1140 DC AL1(64) SS Length
+00000F21 41 1141 DC X'41' Pad Byte
+00000F22 40 1142 DC X'40' First-Operand SS last byte
+00000F23 40 1143 DC X'40' Second-Operand SS last byte
+ 1144 * Source
+00000F24 00005C0C 0000003E 1145 DC A(COP1B),A(062) Op-1 SS & length
+00000F2C 0000EC0C 0000003E 1146 DC A(COP2B),A(062) OP-2 SS & length
+ 1147 * Target
+00000F34 00550000 000001F4 1148 DC A(5*MB+(10*K32)),A(500) Op-1 & length
+00000F3C 00650000 00000200 1149 DC A(6*MB+(10*K32)),A(512) Op-2 & length
+ 1150 *
+00000F44 0000000D 1151 DC A(13) not CC2 Fail mask
+ 1152 * Ending register values
+00000F48 005501F4 00000000 1153 DC A(5*MB+(10*K32)+500),A(000) OP-1
+00000F50 00650200 00000000 1154 DC A(6*MB+(10*K32)+512),A(000) OP-2
+
+ 1156 * Pad - operand-2
+
+00000F58 1158 CC2TB DS 0F
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 25
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00000F58 2B 1159 DC X'2B' Test Num
+00000F59 000000 1160 DC XL3'00'
+ 1161 *
+00000F5C 40 1162 DC AL1(64) SS Length
+00000F5D 41 1163 DC X'41' Pad Byte
+00000F5E 40 1164 DC X'40' First-Operand SS last byte
+00000F5F 40 1165 DC X'40' Second-Operand SS last byte
+ 1166 * Source
+00000F60 00005C0C 0000003E 1167 DC A(COP1B),A(062) Op-1 SS & length
+00000F68 0000EC0C 0000003E 1168 DC A(COP2B),A(062) OP-2 SS & length
+ 1169 * Target
+00000F70 00558000 00000200 1170 DC A(5*MB+(11*K32)),A(512) Op-1 & length
+00000F78 00658000 000001F4 1171 DC A(6*MB+(11*K32)),A(500) Op-2 & length
+ 1172 *
+00000F80 0000000D 1173 DC A(13) not CC2 Fail mask
+ 1174 * Ending register values
+00000F84 00558200 00000000 1175 DC A(5*MB+(11*K32)+512),A(000) OP-1
+00000F8C 006581F4 00000000 1176 DC A(6*MB+(11*K32)+500),A(000) OP-2
+
+ 1178 * PAD and Cross page bounday tests
+
+ 1180 * Pad - operand-1 ; Cross page bounday - operand-1
+
+00000F94 1182 CC2TC DS 0F
+00000F94 2C 1183 DC X'2C' Test Num
+00000F95 000000 1184 DC XL3'00'
+ 1185 *
+00000F98 40 1186 DC AL1(64) SS Length
+00000F99 41 1187 DC X'41' Pad Byte
+00000F9A 40 1188 DC X'40' First-Operand SS last byte
+00000F9B 40 1189 DC X'40' Second-Operand SS last byte
+ 1190 * Source
+00000F9C 00005C0C 0000003E 1191 DC A(COP1B),A(062) Op-1 SS & length
+00000FA4 0000EC0C 0000003E 1192 DC A(COP2B),A(062) OP-2 SS & length
+ 1193 * Target
+00000FAC 0055FFA0 000001F4 1194 DC A(5*MB+(12*K32)-96),A(500) Op-1 & length
+00000FB4 00660000 00000200 1195 DC A(6*MB+(12*K32)),A(512) Op-2 & length
+ 1196 *
+00000FBC 0000000D 1197 DC A(13) not CC2 Fail mask
+ 1198 * Ending register values
+00000FC0 00560194 00000000 1199 DC A(5*MB+(12*K32)+500-96),A(000) OP-1
+00000FC8 00660200 00000000 1200 DC A(6*MB+(12*K32)+512),A(000) OP-2
+
+ 1202 * Pad - operand-1 ; Cross page bounday - operand-2
+
+00000FD0 1204 CC2TD DS 0F
+00000FD0 2D 1205 DC X'2D' Test Num
+00000FD1 000000 1206 DC XL3'00'
+ 1207 *
+00000FD4 40 1208 DC AL1(64) SS Length
+00000FD5 41 1209 DC X'41' Pad Byte
+00000FD6 40 1210 DC X'40' First-Operand SS last byte
+00000FD7 40 1211 DC X'40' Second-Operand SS last byte
+ 1212 * Source
+00000FD8 00005C0C 0000003E 1213 DC A(COP1B),A(062) Op-1 SS & length
+00000FE0 0000EC0C 0000003E 1214 DC A(COP2B),A(062) OP-2 SS & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 26
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1215 * Target
+00000FE8 00568000 000001F4 1216 DC A(5*MB+(13*K32)),A(500) Op-1 & length
+00000FF0 00667FA0 00000200 1217 DC A(6*MB+(13*K32)-96),A(512) Op-2 & length
+ 1218 *
+00000FF8 0000000D 1219 DC A(13) not CC2 Fail mask
+ 1220 * Ending register values
+00000FFC 005681F4 00000000 1221 DC A(5*MB+(13*K32)+500),A(000) OP-1
+00001004 006681A0 00000000 1222 DC A(6*MB+(13*K32)+512-96),A(000) OP-2
+
+ 1224 * Pad - operand-2 ; Cross page bounday - operand-1
+
+0000100C 1226 CC2TE DS 0F
+0000100C 2E 1227 DC X'2E' Test Num
+0000100D 000000 1228 DC XL3'00'
+ 1229 *
+00001010 40 1230 DC AL1(64) SS Length
+00001011 41 1231 DC X'41' Pad Byte
+00001012 40 1232 DC X'40' First-Operand SS last byte
+00001013 40 1233 DC X'40' Second-Operand SS last byte
+ 1234 * Source
+00001014 00005C0C 0000003E 1235 DC A(COP1B),A(062) Op-1 SS & length
+0000101C 0000EC0C 0000003E 1236 DC A(COP2B),A(062) OP-2 SS & length
+ 1237 * Target
+00001024 0056FFA0 00000200 1238 DC A(5*MB+(14*K32)-96),A(512) Op-1 & length
+0000102C 00670000 000001F4 1239 DC A(6*MB+(14*K32)),A(500) Op-2 & length
+ 1240 *
+00001034 0000000D 1241 DC A(13) not CC2 Fail mask
+ 1242 * Ending register values
+00001038 005701A0 00000000 1243 DC A(5*MB+(14*K32)+512-96),A(000) OP-1
+00001040 006701F4 00000000 1244 DC A(6*MB+(14*K32)+500),A(000) OP-2
+
+ 1246 * Pad - operand-2 ; Cross page bounday - operand-2
+
+00001048 1248 CC2TF DS 0F
+00001048 2F 1249 DC X'2F' Test Num
+00001049 000000 1250 DC XL3'00'
+ 1251 *
+0000104C 40 1252 DC AL1(64) SS Length
+0000104D 41 1253 DC X'41' Pad Byte
+0000104E 40 1254 DC X'40' First-Operand SS last byte
+0000104F 40 1255 DC X'40' Second-Operand SS last byte
+ 1256 * Source
+00001050 00005C0C 0000003E 1257 DC A(COP1B),A(062) Op-1 SS & length
+00001058 0000EC0C 0000003E 1258 DC A(COP2B),A(062) OP-2 SS & length
+ 1259 * Target
+00001060 00578000 00000200 1260 DC A(5*MB+(15*K32)),A(512) Op-1 & length
+00001068 00677FA0 000001F4 1261 DC A(6*MB+(15*K32)-96),A(500) Op-2 & length
+ 1262 *
+00001070 0000000D 1263 DC A(13) not CC2 Fail mask
+ 1264 * Ending register values
+00001074 00578200 00000000 1265 DC A(5*MB+(15*K32)+512),A(000) OP-1
+0000107C 00678194 00000000 1266 DC A(6*MB+(15*K32)+500-96),A(000) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 27
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1268 ***********************************************************************
+ 1269 * tests with CC=3
+ 1270 ***********************************************************************
+
+00001084 1272 CC3T1 DS 0F
+00001084 31 1273 DC X'31' Test Num
+00001085 000000 1274 DC XL3'00'
+ 1275 *
+00001088 01 1276 DC AL1(1) SS Length
+00001089 00 1277 DC X'00' Pad Byte
+0000108A AA 1278 DC X'AA' First-Operand SS last byte
+0000108B AA 1279 DC X'AA' Second-Operand SS last byte
+ 1280 * Source
+0000108C 0000380C 00000001 1281 DC A(COP1A),A(1) Op-1 SS & length
+00001094 0000C80C 00000001 1282 DC A(COP2A),A(1) OP-2 SS & length
+ 1283 * Target
+0000109C 00708000 00001080 1284 DC A(7*MB+(1*K32)),A(4096+128) Op-1 & length
+000010A4 00808000 00001080 1285 DC A(8*MB+(1*K32)),A(4096+128) Op-2 & length
+ 1286 *
+000010AC 00000006 1287 DC A(6) not CC0 or CC3 Fail mask
+ 1288 * Ending register values
+000010B0 0070907F 00000001 1289 DC A(7*MB+(1*K32)+4096+128-1),A(001) OP-1
+000010B8 0080907F 00000001 1290 DC A(8*MB+(1*K32)+4096+128-1),A(001) OP-2
+
+
+000010C0 1292 CC3T3 DS 0F
+000010C0 33 1293 DC X'33' Test Num
+000010C1 000000 1294 DC XL3'00'
+ 1295 *
+000010C4 06 1296 DC AL1(6) SS Length
+000010C5 00 1297 DC X'00' Pad Byte
+000010C6 CC 1298 DC X'CC' First-Operand SS last byte
+000010C7 CC 1299 DC X'CC' Second-Operand SS last byte
+ 1300 * Source
+000010C8 0000380C 00000004 1301 DC A(COP1A),A(004) Op-1 SS & length
+000010D0 0000C80C 00000004 1302 DC A(COP2A),A(004) OP-2 SS & length
+ 1303 * Target
+000010D8 00718000 00001080 1304 DC A(7*MB+(3*K32)),A(4096+128) Op-1 & length
+000010E0 00818000 00001080 1305 DC A(8*MB+(3*K32)),A(4096+128) Op-2 & length
+ 1306 *
+000010E8 0000000A 1307 DC A(10) not CC1 or CC3 Fail mask
+ 1308 * Ending register values
+000010EC 0071907C 00000004 1309 DC A(7*MB+(3*K32)+(4096+128-4)),A(004) OP-1
+000010F4 0081907C 00000004 1310 DC A(8*MB+(3*K32)+(4096+128-4)),A(004) OP-2
+
+
+000010FC 1312 CC3T4 DS 0F
+000010FC 34 1313 DC X'34' Test Num
+000010FD 000000 1314 DC XL3'00'
+ 1315 *
+00001100 12 1316 DC AL1(18) SS Length
+00001101 00 1317 DC X'00' Pad Byte
+00001102 DD 1318 DC X'DD' First-Operand SS last byte
+00001103 DE 1319 DC X'DE' Second-Operand SS last byte
+ 1320 * Source
+00001104 0000380C 0000000D 1321 DC A(COP1A),A(013) Op-1 SS & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 28
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+0000110C 0000C80C 0000000D 1322 DC A(COP2A),A(013) OP-2 SS & length
+ 1323 * Target
+00001114 00720000 0000103F 1324 DC A(7*MB+(4*K32)),A(4096+63) Op-1 & length
+0000111C 00820000 0000103F 1325 DC A(8*MB+(4*K32)),A(4096+63) Op-2 & length
+ 1326 *
+00001124 0000000C 1327 DC A(12) not CC2 or CC3 Fail mask
+ 1328 * Ending register values
+00001128 0072103F 00000000 1329 DC A(7*MB+(4*K32)+4096+63),A(000) OP-1
+00001130 0082103F 00000000 1330 DC A(8*MB+(4*K32)+4096+63),A(000) OP-2
+
+ 1332 * Cross page bounday tests
+
+ 1334 * Cross page bounday - operand-1
+
+00001138 1336 CC3T7 DS 0F
+00001138 37 1337 DC X'37' Test Num
+00001139 000000 1338 DC XL3'00'
+ 1339 *
+0000113C 3E 1340 DC AL1(62) SS Length
+0000113D 00 1341 DC X'00' Pad Byte
+0000113E 55 1342 DC X'55' First-Operand SS last byte
+0000113F 55 1343 DC X'55' Second-Operand SS last byte
+ 1344 * Source
+00001140 0000380C 0000003E 1345 DC A(COP1A),A(062) Op-1 SS & length
+00001148 0000C80C 0000003E 1346 DC A(COP2A),A(062) OP-2 SS & length
+ 1347 * Target
+00001150 00737F80 00001080 1348 DC A(7*MB+(7*K32)-128),A(4096+128) Op-1 & length
+00001158 00838000 00001080 1349 DC A(8*MB+(7*K32)),A(4096+128) Op-2 & length
+ 1350 *
+00001160 00000006 1351 DC A(6) not CC0 or CC3 Fail mask
+ 1352 * Ending register values
+00001164 00738FC2 0000003E 1353 DC A(7*MB+(7*K32)+(4096+128-62)-128),A(062) OP-1
+0000116C 00839042 0000003E 1354 DC A(8*MB+(7*K32)+(4096+128-62)),A(062) OP-2
+
+ 1356 * Cross page bounday - operand-2
+
+00001174 1358 CC3T8 DS 0F
+00001174 38 1359 DC X'38' Test Num
+00001175 000000 1360 DC XL3'00'
+ 1361 *
+00001178 3E 1362 DC AL1(62) SS Length
+00001179 00 1363 DC X'00' Pad Byte
+0000117A 66 1364 DC X'66' First-Operand SS last byte
+0000117B 66 1365 DC X'66' Second-Operand SS last byte
+ 1366 * Source
+0000117C 0000380C 0000003E 1367 DC A(COP1A),A(062) Op-1 SS & length
+00001184 0000C80C 0000003E 1368 DC A(COP2A),A(062) OP-2 SS & length
+ 1369 * Target
+0000118C 00740000 00001080 1370 DC A(7*MB+(8*K32)),A(4096+128) Op-1 & length
+00001194 0083FF80 00001080 1371 DC A(8*MB+(8*K32)-128),A(4096+128) Op-2 & length
+ 1372 *
+0000119C 00000006 1373 DC A(6) not CC0 or CC3 Fail mask
+ 1374 * Ending register values
+000011A0 00741042 0000003E 1375 DC A(7*MB+(8*K32)+(4096+128-62)),A(062) OP-1
+000011A8 00840FC2 0000003E 1376 DC A(8*MB+(8*K32)+(4096+128-62)-128),A(062) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 29
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1378 * Cross page bounday - operand-1 and operand-2
+
+000011B0 1380 CC3T9 DS 0F
+000011B0 39 1381 DC X'39' Test Num
+000011B1 000000 1382 DC XL3'00'
+ 1383 *
+000011B4 3E 1384 DC AL1(62) SS Length
+000011B5 00 1385 DC X'00' Pad Byte
+000011B6 77 1386 DC X'77' First-Operand SS last byte
+000011B7 77 1387 DC X'77' Second-Operand SS last byte
+ 1388 * Source
+000011B8 0000380C 0000003E 1389 DC A(COP1A),A(062) Op-1 SS & length
+000011C0 0000C80C 0000003E 1390 DC A(COP2A),A(062) OP-2 SS & length
+ 1391 * Target
+000011C8 00747FA0 00001080 1392 DC A(7*MB+(9*K32)-96),A(4096+128) Op-1 & length
+000011D0 00847F80 00001080 1393 DC A(8*MB+(9*K32)-128),A(4096+128) Op-2 & length
+ 1394 *
+000011D8 00000006 1395 DC A(6) not CC0 or CC3 Fail mask
+ 1396 * Ending register values
+000011DC 00748FE2 0000003E 1397 DC A(7*MB+(9*K32)+(4096+128-62)-96),A(062) OP-1
+000011E4 00848FC2 0000003E 1398 DC A(8*MB+(9*K32)+(4096+128-62)-128),A(062) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 30
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1400 ***********************************************************************
+ 1401 * tests - special pad test
+ 1402 ***********************************************************************
+
+ 1404 * Op-1 - length=0
+000011EC 1405 PAD4T1 DS 0F
+000011EC 41 1406 DC X'41' Test Num
+000011ED 000000 1407 DC XL3'00'
+ 1408 *
+000011F0 04 1409 DC AL1(4) SS Length
+000011F1 40 1410 DC X'40' Pad Byte
+000011F2 40 1411 DC X'40' First-Operand SS last byte
+000011F3 40 1412 DC X'40' Second-Operand SS last byte
+ 1413 * Source
+000011F4 00005C0C 00000000 1414 DC A(COP1B),A(000) Op-1 SS & length
+000011FC 0000EC0C 00000004 1415 DC A(COP2B),A(4) OP-2 SS & length
+ 1416 * Target
+00001204 00908000 00000000 1417 DC A(9*MB+(1*K32)),A(000) Op-1 & length
+0000120C 00A08000 00000200 1418 DC A(10*MB+(1*K32)),A(512) Op-2 & length
+ 1419 *
+00001214 00000007 1420 DC A(7) CC0 Fail mask
+ 1421 * Ending register values
+00001218 00908000 00000000 1422 DC A(9*MB+(1*K32)),A(000) OP-1
+00001220 00A081FC 00000004 1423 DC A(10*MB+(1*K32)+(512-4)),A(004) OP-2
+
+
+ 1425 * Op-2 - length=0
+00001228 1426 PAD4T2 DS 0F
+00001228 42 1427 DC X'42' Test Num
+00001229 000000 1428 DC XL3'00'
+ 1429 *
+0000122C 04 1430 DC AL1(4) SS Length
+0000122D 40 1431 DC X'40' Pad Byte
+0000122E 40 1432 DC X'40' First-Operand SS last byte
+0000122F 40 1433 DC X'40' Second-Operand SS last byte
+ 1434 * Source
+00001230 00005C0C 00000004 1435 DC A(COP1B),A(4) Op-1 SS & length
+00001238 0000EC0C 00000000 1436 DC A(COP2B),A(000) OP-2 SS & length
+ 1437 * Target
+00001240 00910000 00000200 1438 DC A(9*MB+(2*K32)),A(512) Op-1 & length
+00001248 00A10000 00000000 1439 DC A(10*MB+(2*K32)),A(0) Op-2 & length
+ 1440 *
+00001250 00000007 1441 DC A(7) CC0 Fail mask
+ 1442 * Ending register values
+00001254 009101FC 00000004 1443 DC A(9*MB+(2*K32)+(512-4)),A(004) OP-1
+0000125C 00A10000 00000000 1444 DC A(10*MB+(2*K32)),A(000) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 31
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1446 ***********************************************************************
+ 1447 * tests for Special Cases Optimizations
+ 1448 ***********************************************************************
+
+
+ 1450 * tests for Special Cases Optimizations
+
+00001264 1452 SC5T1 DS 0F
+00001264 51 1453 DC X'51' Test Num
+00001265 000000 1454 DC XL3'00'
+ 1455 *
+00001268 04 1456 DC AL1(4) SS Length
+00001269 00 1457 DC X'00' Pad Byte
+0000126A 77 1458 DC X'77' First-Operand SS last byte
+0000126B 77 1459 DC X'77' Second-Operand SS last byte
+ 1460 * Source
+0000126C 0000800C 00000020 1461 DC A(COP1C),A(032) Op-1 SS & length
+00001274 0001100C 00000020 1462 DC A(COP2C),A(032) OP-2 SS & length
+ 1463 * Target
+0000127C 00937FA0 00000200 1464 DC A(9*MB+(7*K32)-96),A(512) Op-1 & length
+00001284 00A37F80 00000200 1465 DC A(10*MB+(7*K32)-128),A(512) Op-2 & length
+ 1466 *
+0000128C 00000006 1467 DC A(6) not CC0 or CC3 Fail mask
+ 1468 * Ending register values
+00001290 0093817D 00000023 1469 DC A(9*MB+(7*K32)+(512-32)-96-3),A(032+3) OP-1
+00001298 00A3815D 00000023 1470 DC A(10*MB+(7*K32)+(512-32)-128-3),A(032+3) OP-2
+
+000012A0 1472 SC5T2 DS 0F
+000012A0 52 1473 DC X'52' Test Num
+000012A1 000000 1474 DC XL3'00'
+ 1475 *
+000012A4 07 1476 DC AL1(7) SS Length
+000012A5 00 1477 DC X'00' Pad Byte
+000012A6 77 1478 DC X'77' First-Operand SS last byte
+000012A7 77 1479 DC X'77' Second-Operand SS last byte
+ 1480 * Source
+000012A8 0000800C 0000001B 1481 DC A(COP1C),A(027) Op-1 SS & length
+000012B0 0001100C 0000001B 1482 DC A(COP2C),A(027) OP-2 SS & length
+ 1483 * Target
+000012B8 0093FFA0 00000200 1484 DC A(9*MB+(8*K32)-96),A(512) Op-1 & length
+000012C0 00A3FF80 00000200 1485 DC A(10*MB+(8*K32)-128),A(512) Op-2 & length
+ 1486 *
+000012C8 00000006 1487 DC A(6) not CC0 or CC3 Fail mask
+ 1488 * Ending register values
+000012CC 00940182 0000001E 1489 DC A(9*MB+(8*K32)+(512-27)-96-3),A(027+3) OP-1
+000012D4 00A40162 0000001E 1490 DC A(10*MB+(8*K32)+(512-27)-128-3),A(027+3) OP-2
+
+000012DC 1492 SC5T3 DS 0F
+000012DC 53 1493 DC X'53' Test Num
+000012DD 000000 1494 DC XL3'00'
+ 1495 *
+000012E0 01 1496 DC AL1(1) SS Length
+000012E1 00 1497 DC X'00' Pad Byte
+000012E2 77 1498 DC X'77' First-Operand SS last byte
+000012E3 77 1499 DC X'77' Second-Operand SS last byte
+ 1500 * Source
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 32
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+000012E4 00005C0C 0000001B 1501 DC A(COP1B),A(027) Op-1 SS & length
+000012EC 0000EC0C 0000001B 1502 DC A(COP2B),A(027) OP-2 SS & length
+ 1503 * Target
+000012F4 00947FA0 00000200 1504 DC A(9*MB+(9*K32)-96),A(512) Op-1 & length
+000012FC 00A47F80 00000200 1505 DC A(10*MB+(9*K32)-128),A(512) Op-2 & length
+ 1506 *
+00001304 00000006 1507 DC A(6) not CC0 or CC3 Fail mask
+ 1508 * Ending register values
+00001308 00948185 0000001B 1509 DC A(9*MB+(9*K32)+(512-27)-96),A(027) OP-1
+00001310 00A48165 0000001B 1510 DC A(10*MB+(9*K32)+(512-27)-128),A(027) OP-2
+
+00001318 1512 SC5T4 DS 0F
+00001318 54 1513 DC X'54' Test Num
+00001319 000000 1514 DC XL3'00'
+ 1515 *
+0000131C 03 1516 DC AL1(3) SS Length
+0000131D 00 1517 DC X'00' Pad Byte
+0000131E 77 1518 DC X'77' First-Operand SS last byte
+0000131F 77 1519 DC X'77' Second-Operand SS last byte
+ 1520 * Source
+00001320 0000A40C 0000001B 1521 DC A(COP1D),A(027) Op-1 SS & length
+00001328 0001340C 0000001B 1522 DC A(COP2D),A(027) OP-2 SS & length
+ 1523 * Target
+00001330 0094FFA0 00000200 1524 DC A(9*MB+(10*K32)-96),A(512) Op-1 & length
+00001338 00A4FF80 00000200 1525 DC A(10*MB+(10*K32)-128),A(512) Op-2 & length
+ 1526 *
+00001340 00000006 1527 DC A(6) not CC0 or CC3 Fail mask
+ 1528 * Ending register values
+00001344 00950185 0000001B 1529 DC A(9*MB+(10*K32)+(512-27)-96),A(27) OP-1
+0000134C 00A50165 0000001B 1530 DC A(10*MB+(10*K32)+(512-27)-128),A(27) OP-2
+
+ 1532 * subtring starts on a page boundary
+
+00001354 1534 SC5T5 DS 0F
+00001354 55 1535 DC X'55' Test Num
+00001355 000000 1536 DC XL3'00'
+ 1537 *
+00001358 04 1538 DC AL1(4) SS Length
+00001359 00 1539 DC X'00' Pad Byte
+0000135A CC 1540 DC X'CC' First-Operand SS last byte
+0000135B CC 1541 DC X'CC' Second-Operand SS last byte
+ 1542 * Source
+0000135C 0000380C 00000004 1543 DC A(COP1A),A(004) Op-1 SS & length
+00001364 0000C80C 00000004 1544 DC A(COP2A),A(004) OP-2 SS & length
+ 1545 * Target
+0000136C 00957FFC 00000008 1546 DC A(9*MB+(11*K32)-4),A(8) Op-1 & length
+00001374 00A57FFC 00000008 1547 DC A(10*MB+(11*K32)-4),A(8) Op-2 & length
+ 1548 *
+0000137C 00000007 1549 DC A(7) CC0 Fail mask
+ 1550 * Ending register values
+00001380 00958000 00000004 1551 DC A(9*MB+(11*K32)-4+(8-4)),A(004) OP-1
+00001388 00A58000 00000004 1552 DC A(10*MB+(11*K32)-4+(8-4)),A(004) OP-2
+
+ 1554 * subtring starts on a byte before page boundary
+
+00001390 1556 SC5T6 DS 0F
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 33
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00001390 56 1557 DC X'56' Test Num
+00001391 000000 1558 DC XL3'00'
+ 1559 *
+00001394 04 1560 DC AL1(4) SS Length
+00001395 00 1561 DC X'00' Pad Byte
+00001396 CC 1562 DC X'CC' First-Operand SS last byte
+00001397 CC 1563 DC X'CC' Second-Operand SS last byte
+ 1564 * Source
+00001398 0000380C 00000004 1565 DC A(COP1A),A(004) Op-1 SS & length
+000013A0 0000C80C 00000004 1566 DC A(COP2A),A(004) OP-2 SS & length
+ 1567 * Target
+000013A8 0095FFFB 00000008 1568 DC A(9*MB+(12*K32)-5),A(8) Op-1 & length
+000013B0 00A5FFFB 00000008 1569 DC A(10*MB+(12*K32)-5),A(8) Op-2 & length
+ 1570 *
+000013B8 00000007 1571 DC A(7) CC0 Fail mask
+ 1572 * Ending register values
+000013BC 0095FFFF 00000004 1573 DC A(9*MB+(12*K32)-5+(8-4)),A(004) OP-1
+000013C4 00A5FFFF 00000004 1574 DC A(10*MB+(12*K32)-5+(8-4)),A(004) OP-2
+
+ 1576 * subtring starts on a byte after page boundary
+
+000013CC 1578 SC5T7 DS 0F
+000013CC 57 1579 DC X'57' Test Num
+000013CD 000000 1580 DC XL3'00'
+ 1581 *
+000013D0 04 1582 DC AL1(4) SS Length
+000013D1 00 1583 DC X'00' Pad Byte
+000013D2 CC 1584 DC X'CC' First-Operand SS last byte
+000013D3 CC 1585 DC X'CC' Second-Operand SS last byte
+ 1586 * Source
+000013D4 0000380C 00000004 1587 DC A(COP1A),A(004) Op-1 SS & length
+000013DC 0000C80C 00000004 1588 DC A(COP2A),A(004) OP-2 SS & length
+ 1589 * Target
+000013E4 00967FFD 00000008 1590 DC A(9*MB+(13*K32)-3),A(8) Op-1 & length
+000013EC 00A67FFD 00000008 1591 DC A(10*MB+(13*K32)-3),A(8) Op-2 & length
+ 1592 *
+000013F4 00000007 1593 DC A(7) CC0 Fail mask
+ 1594 * Ending register values
+000013F8 00968001 00000004 1595 DC A(9*MB+(13*K32)-3+(8-4)),A(004) OP-1
+00001400 00A68001 00000004 1596 DC A(10*MB+(13*K32)-3+(8-4)),A(004) OP-2
+
+ 1598 * Strings with multiple equal bytes
+ 1599 * subtring starts on a page boundary
+
+00001408 1601 SC5T8 DS 0F
+00001408 58 1602 DC X'58' Test Num
+00001409 000000 1603 DC XL3'00'
+ 1604 *
+0000140C 04 1605 DC AL1(4) SS Length
+0000140D 00 1606 DC X'00' Pad Byte
+0000140E CC 1607 DC X'CC' First-Operand SS last byte
+0000140F CC 1608 DC X'CC' Second-Operand SS last byte
+ 1609 * Source
+00001410 0000800C 00000004 1610 DC A(COP1C),A(004) Op-1 SS & length
+00001418 0001100C 00000004 1611 DC A(COP2C),A(004) OP-2 SS & length
+ 1612 * Target
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 34
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00001420 0096FFFC 00000008 1613 DC A(9*MB+(14*K32)-4),A(8) Op-1 & length
+00001428 00A6FFFC 00000008 1614 DC A(10*MB+(14*K32)-4),A(8) Op-2 & length
+ 1615 *
+00001430 00000007 1616 DC A(7) CC0 Fail mask
+ 1617 * Ending register values
+00001434 0096FFFD 00000007 1618 DC A(9*MB+(14*K32)-4+(8-7)),A(007) OP-1
+0000143C 00A6FFFD 00000007 1619 DC A(10*MB+(14*K32)-4+(8-7)),A(007) OP-2
+
+ 1621 * subtring starts on a byte before page boundary
+
+00001444 1623 SC5T9 DS 0F
+00001444 59 1624 DC X'59' Test Num
+00001445 000000 1625 DC XL3'00'
+ 1626 *
+00001448 04 1627 DC AL1(4) SS Length
+00001449 00 1628 DC X'00' Pad Byte
+0000144A CC 1629 DC X'CC' First-Operand SS last byte
+0000144B CC 1630 DC X'CC' Second-Operand SS last byte
+ 1631 * Source
+0000144C 0000800C 00000004 1632 DC A(COP1C),A(004) Op-1 SS & length
+00001454 0001100C 00000004 1633 DC A(COP2C),A(004) OP-2 SS & length
+ 1634 * Target
+0000145C 00977FFB 00000008 1635 DC A(9*MB+(15*K32)-5),A(8) Op-1 & length
+00001464 00A77FFB 00000008 1636 DC A(10*MB+(15*K32)-5),A(8) Op-2 & length
+ 1637 *
+0000146C 00000007 1638 DC A(7) CC0 Fail mask
+ 1639 * Ending register values
+00001470 00977FFC 00000007 1640 DC A(9*MB+(15*K32)-5+(8-7)),A(007) OP-1
+00001478 00A77FFC 00000007 1641 DC A(10*MB+(15*K32)-5+(8-7)),A(007) OP-2
+
+ 1643 * subtring starts on a byte after page boundary
+
+00001480 1645 SC5TA DS 0F
+00001480 5A 1646 DC X'5A' Test Num
+00001481 000000 1647 DC XL3'00'
+ 1648 *
+00001484 04 1649 DC AL1(4) SS Length
+00001485 00 1650 DC X'00' Pad Byte
+00001486 CC 1651 DC X'CC' First-Operand SS last byte
+00001487 CC 1652 DC X'CC' Second-Operand SS last byte
+ 1653 * Source
+00001488 0000800C 00000004 1654 DC A(COP1C),A(004) Op-1 SS & length
+00001490 0001100C 00000004 1655 DC A(COP2C),A(004) OP-2 SS & length
+ 1656 * Target
+00001498 0097FFFD 00000008 1657 DC A(9*MB+(16*K32)-3),A(8) Op-1 & length
+000014A0 00A7FFFD 00000008 1658 DC A(10*MB+(16*K32)-3),A(8) Op-2 & length
+ 1659 *
+000014A8 00000007 1660 DC A(7) CC0 Fail mask
+ 1661 * Ending register values
+000014AC 0097FFFE 00000007 1662 DC A(9*MB+(16*K32)-3+(8-7)),A(007) OP-1
+000014B4 00A7FFFE 00000007 1663 DC A(10*MB+(16*K32)-3+(8-7)),A(007) OP-2
+
+ 1665 * Strings with multiple equal bytes
+ 1666 * subtring starts on a page boundary
+
+000014BC 1668 SC5TB DS 0F
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 35
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+000014BC 5B 1669 DC X'5B' Test Num
+000014BD 000000 1670 DC XL3'00'
+ 1671 *
+000014C0 04 1672 DC AL1(4) SS Length
+000014C1 00 1673 DC X'00' Pad Byte
+000014C2 CC 1674 DC X'CC' First-Operand SS last byte
+000014C3 CC 1675 DC X'CC' Second-Operand SS last byte
+ 1676 * Source
+000014C4 0000A40C 00000004 1677 DC A(COP1D),A(004) Op-1 SS & length
+000014CC 0001340C 00000004 1678 DC A(COP2D),A(004) OP-2 SS & length
+ 1679 * Target
+000014D4 00987FFC 00000008 1680 DC A(9*MB+(17*K32)-4),A(8) Op-1 & length
+000014DC 00A87FFC 00000008 1681 DC A(10*MB+(17*K32)-4),A(8) Op-2 & length
+ 1682 *
+000014E4 00000007 1683 DC A(7) CC0 Fail mask
+ 1684 * Ending register values
+000014E8 00988000 00000004 1685 DC A(9*MB+(17*K32)-4+(8-4)),A(004) OP-1
+000014F0 00A88000 00000004 1686 DC A(10*MB+(17*K32)-4+(8-4)),A(004) OP-2
+
+ 1688 * subtring starts on a byte before page boundary
+
+000014F8 1690 SC5TC DS 0F
+000014F8 5C 1691 DC X'5C' Test Num
+000014F9 000000 1692 DC XL3'00'
+ 1693 *
+000014FC 04 1694 DC AL1(4) SS Length
+000014FD 00 1695 DC X'00' Pad Byte
+000014FE CC 1696 DC X'CC' First-Operand SS last byte
+000014FF CC 1697 DC X'CC' Second-Operand SS last byte
+ 1698 * Source
+00001500 0000A40C 00000004 1699 DC A(COP1D),A(004) Op-1 SS & length
+00001508 0001340C 00000004 1700 DC A(COP2D),A(004) OP-2 SS & length
+ 1701 * Target
+00001510 0098FFFB 00000008 1702 DC A(9*MB+(18*K32)-5),A(8) Op-1 & length
+00001518 00A8FFFB 00000008 1703 DC A(10*MB+(18*K32)-5),A(8) Op-2 & length
+ 1704 *
+00001520 00000007 1705 DC A(7) CC0 Fail mask
+ 1706 * Ending register values
+00001524 0098FFFF 00000004 1707 DC A(9*MB+(18*K32)-5+(8-4)),A(004) OP-1
+0000152C 00A8FFFF 00000004 1708 DC A(10*MB+(18*K32)-5+(8-4)),A(004) OP-2
+
+ 1710 * subtring starts on a byte after page boundary
+
+00001534 1712 SC5TD DS 0F
+00001534 5D 1713 DC X'5D' Test Num
+00001535 000000 1714 DC XL3'00'
+ 1715 *
+00001538 04 1716 DC AL1(4) SS Length
+00001539 00 1717 DC X'00' Pad Byte
+0000153A CC 1718 DC X'CC' First-Operand SS last byte
+0000153B CC 1719 DC X'CC' Second-Operand SS last byte
+ 1720 * Source
+0000153C 0000A40C 00000004 1721 DC A(COP1D),A(004) Op-1 SS & length
+00001544 0001340C 00000004 1722 DC A(COP2D),A(004) OP-2 SS & length
+ 1723 * Target
+0000154C 00997FFD 00000008 1724 DC A(9*MB+(19*K32)-3),A(8) Op-1 & length
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 36
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00001554 00A97FFD 00000008 1725 DC A(10*MB+(19*K32)-3),A(8) Op-2 & length
+ 1726 *
+0000155C 00000007 1727 DC A(7) CC0 Fail mask
+ 1728 * Ending register values
+00001560 00998001 00000004 1729 DC A(9*MB+(19*K32)-3+(8-4)),A(004) OP-1
+00001568 00A98001 00000004 1730 DC A(10*MB+(19*K32)-3+(8-4)),A(004) OP-2
+ 1731
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 37
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1733 ***********************************************************************
+ 1734 * potential tests for CUSE-02-performance
+ 1735 ***********************************************************************
+
+ 1737 * Cross page bounday - operand-1 and operand-2
+
+00001570 1739 PTE1 DS 0F
+00001570 E1 1740 DC X'E1' Test Num
+00001571 000000 1741 DC XL3'00'
+ 1742 *
+00001574 04 1743 DC AL1(4) SS Length
+00001575 00 1744 DC X'00' Pad Byte
+00001576 EE 1745 DC X'EE' First-Operand SS last byte
+00001577 EE 1746 DC X'EE' Second-Operand SS last byte
+ 1747 * Source
+00001578 0000380C 00000004 1748 DC A(COP1A),A(004) Op-1 SS & length
+00001580 0000C80C 00000004 1749 DC A(COP2A),A(004) OP-2 SS & length
+ 1750 * Target
+00001588 00B07FC1 00000200 1751 DC A(11*MB+(1*K32)-63),A(512) Op-1 & length
+00001590 00C07FC8 00000200 1752 DC A(12*MB+(1*K32)-56),A(512) Op-2 & length
+ 1753 *
+00001598 00000007 1754 DC A(7) CC0 Fail mask
+ 1755 * Ending register values
+0000159C 00B081BD 00000004 1756 DC A(11*MB+(1*K32)-63+(512-4)),A(004) OP-1
+000015A4 00C081C4 00000004 1757 DC A(12*MB+(1*K32)-56+(512-4)),A(004) OP-2
+
+000015AC 1759 PTE2 DS 0F
+000015AC E2 1760 DC X'E2' Test Num
+000015AD 000000 1761 DC XL3'00'
+ 1762 *
+000015B0 08 1763 DC AL1(8) SS Length
+000015B1 00 1764 DC X'00' Pad Byte
+000015B2 77 1765 DC X'77' First-Operand SS last byte
+000015B3 77 1766 DC X'77' Second-Operand SS last byte
+ 1767 * Source
+000015B4 0000380C 00000008 1768 DC A(COP1A),A(008) Op-1 SS & length
+000015BC 0000C80C 00000008 1769 DC A(COP2A),A(008) OP-2 SS & length
+ 1770 * Target
+000015C4 00B0FFA0 00000200 1771 DC A(11*MB+(2*K32)-96),A(512) Op-1 & length
+000015CC 00C0FF80 00000200 1772 DC A(12*MB+(2*K32)-128),A(512) Op-2 & length
+ 1773 *
+000015D4 00000007 1774 DC A(7) CC0 Fail mask
+ 1775 * Ending register values
+000015D8 00B10198 00000008 1776 DC A(11*MB+(2*K32)+(512-8)-96),A(008) OP-1
+000015E0 00C10178 00000008 1777 DC A(12*MB+(2*K32)+(512-8)-128),A(008) OP-2
+
+
+000015E8 1779 PTE3 DS 0F
+000015E8 E3 1780 DC X'E3' Test Num
+000015E9 000000 1781 DC XL3'00'
+ 1782 *
+000015EC 10 1783 DC AL1(16) SS Length
+000015ED 00 1784 DC X'00' Pad Byte
+000015EE 77 1785 DC X'77' First-Operand SS last byte
+000015EF 77 1786 DC X'77' Second-Operand SS last byte
+ 1787 * Source
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 38
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+000015F0 0000380C 00000010 1788 DC A(COP1A),A(016) Op-1 SS & length
+000015F8 0000C80C 00000010 1789 DC A(COP2A),A(016) OP-2 SS & length
+ 1790 * Target
+00001600 00B17FA0 00000200 1791 DC A(11*MB+(3*K32)-96),A(512) Op-1 & length
+00001608 00C17F80 00000200 1792 DC A(12*MB+(3*K32)-128),A(512) Op-2 & length
+ 1793 *
+00001610 00000007 1794 DC A(7) CC0 Fail mask
+ 1795 * Ending register values
+00001614 00B18190 00000010 1796 DC A(11*MB+(3*K32)+(512-16)-96),A(016) OP-1
+0000161C 00C18170 00000010 1797 DC A(12*MB+(3*K32)+(512-16)-128),A(016) OP-2
+
+
+00001624 1799 PTE4 DS 0F
+00001624 E4 1800 DC X'E4' Test Num
+00001625 000000 1801 DC XL3'00'
+ 1802 *
+00001628 20 1803 DC AL1(32) SS Length
+00001629 00 1804 DC X'00' Pad Byte
+0000162A 77 1805 DC X'77' First-Operand SS last byte
+0000162B 77 1806 DC X'77' Second-Operand SS last byte
+ 1807 * Source
+0000162C 0000380C 00000020 1808 DC A(COP1A),A(032) Op-1 SS & length
+00001634 0000C80C 00000020 1809 DC A(COP2A),A(032) OP-2 SS & length
+ 1810 * Target
+0000163C 00B1FFA0 00000200 1811 DC A(11*MB+(4*K32)-96),A(512) Op-1 & length
+00001644 00C1FF80 00000200 1812 DC A(12*MB+(4*K32)-128),A(512) Op-2 & length
+ 1813 *
+0000164C 00000006 1814 DC A(6) not CC0 or CC3 Fail mask
+ 1815 * Ending register values
+00001650 00B20180 00000020 1816 DC A(11*MB+(4*K32)+(512-32)-96),A(032) OP-1
+00001658 00C20160 00000020 1817 DC A(12*MB+(4*K32)+(512-32)-128),A(032) OP-2
+
+
+00001660 1819 PTE5 DS 0F
+00001660 E5 1820 DC X'E5' Test Num
+00001661 000000 1821 DC XL3'00'
+ 1822 *
+00001664 40 1823 DC AL1(64) SS Length
+00001665 00 1824 DC X'00' Pad Byte
+00001666 77 1825 DC X'77' First-Operand SS last byte
+00001667 77 1826 DC X'77' Second-Operand SS last byte
+ 1827 * Source
+00001668 0000380C 00000040 1828 DC A(COP1A),A(064) Op-1 SS & length
+00001670 0000C80C 00000040 1829 DC A(COP2A),A(064) OP-2 SS & length
+ 1830 * Target
+00001678 00B27FA0 00000200 1831 DC A(11*MB+(5*K32)-96),A(512) Op-1 & length
+00001680 00C27F80 00000200 1832 DC A(12*MB+(5*K32)-128),A(512) Op-2 & length
+ 1833 *
+00001688 00000006 1834 DC A(6) not CC0 or CC3 Fail mask
+ 1835 * Ending register values
+0000168C 00B28160 00000040 1836 DC A(11*MB+(5*K32)+(512-64)-96),A(064) OP-1
+00001694 00C28140 00000040 1837 DC A(12*MB+(5*K32)+(512-64)-128),A(064) OP-2
+
+
+0000169C 1839 PTE6 DS 0F
+0000169C E6 1840 DC X'E6' Test Num
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 39
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+0000169D 000000 1841 DC XL3'00'
+ 1842 *
+000016A0 01 1843 DC AL1(1) SS Length
+000016A1 00 1844 DC X'00' Pad Byte
+000016A2 77 1845 DC X'77' First-Operand SS last byte
+000016A3 77 1846 DC X'77' Second-Operand SS last byte
+ 1847 * Source
+000016A4 0000380C 00000020 1848 DC A(COP1A),A(032) Op-1 SS & length
+000016AC 0000C80C 00000020 1849 DC A(COP2A),A(032) OP-2 SS & length
+ 1850 * Target
+000016B4 00B2FFA0 00000200 1851 DC A(11*MB+(6*K32)-96),A(512) Op-1 & length
+000016BC 00C2FF80 00000200 1852 DC A(12*MB+(6*K32)-128),A(512) Op-2 & length
+ 1853 *
+000016C4 00000006 1854 DC A(6) not CC0 or CC3 Fail mask
+ 1855 * Ending register values
+000016C8 00B30180 00000020 1856 DC A(11*MB+(6*K32)+(512-32)-96),A(032) OP-1
+000016D0 00C30160 00000020 1857 DC A(12*MB+(6*K32)+(512-32)-128),A(032) OP-2
+
+
+000016D8 1859 PTE7 DS 0F
+000016D8 E7 1860 DC X'E7' Test Num
+000016D9 000000 1861 DC XL3'00'
+ 1862 *
+000016DC 04 1863 DC AL1(4) SS Length
+000016DD 00 1864 DC X'00' Pad Byte
+000016DE 77 1865 DC X'77' First-Operand SS last byte
+000016DF 77 1866 DC X'77' Second-Operand SS last byte
+ 1867 * Source
+000016E0 0000800C 00000020 1868 DC A(COP1C),A(032) Op-1 SS & length
+000016E8 0001100C 00000020 1869 DC A(COP2C),A(032) OP-2 SS & length
+ 1870 * Target
+000016F0 00B37FA0 00000200 1871 DC A(11*MB+(7*K32)-96),A(512) Op-1 & length
+000016F8 00C37F80 00000200 1872 DC A(12*MB+(7*K32)-128),A(512) Op-2 & length
+ 1873 *
+00001700 00000006 1874 DC A(6) not CC0 or CC3 Fail mask
+ 1875 * Ending register values
+00001704 00B3817D 00000023 1876 DC A(11*MB+(7*K32)+(512-32)-96-3),A(032+3) OP-1
+0000170C 00C3815D 00000023 1877 DC A(12*MB+(7*K32)+(512-32)-128-3),A(032+3) OP-2
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 40
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1879 ***********************************************************************
+ 1880 * potential tests for CUSE-02-performance
+ 1881 ***********************************************************************
+
+00001714 1883 PTF1 DS 0F
+00001714 F1 1884 DC X'F1' Test Num
+00001715 000000 1885 DC XL3'00'
+ 1886 *
+00001718 3E 1887 DC AL1(62) SS Length
+00001719 00 1888 DC X'00' Pad Byte
+0000171A EE 1889 DC X'EE' First-Operand SS last byte
+0000171B EE 1890 DC X'EE' Second-Operand SS last byte
+ 1891 * Source
+0000171C 0000380C 0000003E 1892 DC A(COP1A),A(062) Op-1 SS & length
+00001724 0000C80C 0000003E 1893 DC A(COP2A),A(062) OP-2 SS & length
+ 1894 * Target
+0000172C 00D08000 00000200 1895 DC A(13*MB+(1*K32)),A(512) Op-1 & length
+00001734 00E08000 00000200 1896 DC A(14*MB+(1*K32)),A(512) Op-2 & length
+ 1897 *
+0000173C 00000007 1898 DC A(7) CC0 Fail mask
+ 1899 * Ending register values
+00001740 00D081C2 0000003E 1900 DC A(13*MB+(1*K32)+(512-62)),A(062) OP-1
+00001748 00E081C2 0000003E 1901 DC A(14*MB+(1*K32)+(512-62)),A(062) OP-2
+
+ 1903 * Cross page bounday - operand-1 and operand-2
+
+00001750 1905 PTF2 DS 0F
+00001750 F2 1906 DC X'F2' Test Num
+00001751 000000 1907 DC XL3'00'
+ 1908 *
+00001754 20 1909 DC AL1(32) SS Length
+00001755 00 1910 DC X'00' Pad Byte
+00001756 77 1911 DC X'77' First-Operand SS last byte
+00001757 77 1912 DC X'77' Second-Operand SS last byte
+ 1913 * Source
+00001758 0000380C 00000020 1914 DC A(COP1A),A(032) Op-1 SS & length
+00001760 0000C80C 00000020 1915 DC A(COP2A),A(032) OP-2 SS & length
+ 1916 * Target
+00001768 00D0FFA0 00000200 1917 DC A(13*MB+(2*K32)-96),A(512) Op-1 & length
+00001770 00E0FF80 00000200 1918 DC A(14*MB+(2*K32)-128),A(512) Op-2 & length
+ 1919 *
+00001778 00000007 1920 DC A(7) CC0 Fail mask
+ 1921 * Ending register values
+0000177C 00D10180 00000020 1922 DC A(13*MB+(2*K32)+(512-32)-96),A(032) OP-1
+00001784 00E10160 00000020 1923 DC A(14*MB+(2*K32)+(512-32)-128),A(032) OP-2
+
+
+0000178C 1925 PTF3 DS 0F
+0000178C F3 1926 DC X'F3' Test Num
+0000178D 000000 1927 DC XL3'00'
+ 1928 *
+00001790 3E 1929 DC AL1(62) SS Length
+00001791 00 1930 DC X'00' Pad Byte
+00001792 77 1931 DC X'77' First-Operand SS last byte
+00001793 77 1932 DC X'77' Second-Operand SS last byte
+ 1933 * Source
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 41
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00001794 0000380C 0000003E 1934 DC A(COP1A),A(062) Op-1 SS & length
+0000179C 0000C80C 0000003E 1935 DC A(COP2A),A(062) OP-2 SS & length
+ 1936 * Target
+000017A4 00D17FA0 00000800 1937 DC A(13*MB+(3*K32)-96),A(2048) Op-1 & length
+000017AC 00E17F80 00000800 1938 DC A(14*MB+(3*K32)-128),A(2048) Op-2 & length
+ 1939 *
+000017B4 00000007 1940 DC A(7) CC0 Fail mask
+ 1941 * Ending register values
+000017B8 00D18762 0000003E 1942 DC A(13*MB+(3*K32)+(2048-62)-96),A(062) OP-1
+000017C0 00E18742 0000003E 1943 DC A(14*MB+(3*K32)+(2048-62)-128),A(062) OP-2
+
+
+000017C8 1945 PTF4 DS 0F
+000017C8 F4 1946 DC X'F4' Test Num
+000017C9 000000 1947 DC XL3'00'
+ 1948 *
+000017CC 20 1949 DC AL1(32) SS Length
+000017CD 00 1950 DC X'00' Pad Byte
+000017CE 77 1951 DC X'77' First-Operand SS last byte
+000017CF 77 1952 DC X'77' Second-Operand SS last byte
+ 1953 * Source
+000017D0 0000380C 00000020 1954 DC A(COP1A),A(032) Op-1 SS & length
+000017D8 0000C80C 00000020 1955 DC A(COP2A),A(032) OP-2 SS & length
+ 1956 * Target
+000017E0 00D1FFA0 00000F80 1957 DC A(13*MB+(4*K32)-96),A(4096-128) Op-1 & length
+000017E8 00E1FF80 00000F80 1958 DC A(14*MB+(4*K32)-128),A(4096-128) Op-2 & length
+ 1959 *
+000017F0 00000006 1960 DC A(6) not CC0 or CC3 Fail mask
+ 1961 * Ending register values
+000017F4 00D20F00 00000020 1962 DC A(13*MB+(4*K32)+(4096-128-32)-96),A(032) OP-1
+000017FC 00E20EE0 00000020 1963 DC A(14*MB+(4*K32)+(4096-128-32)-128),A(032) OP-2
+
+
+
+00001804 00000000 1965 DC A(0) end of table
+00001808 00000000 1966 DC A(0) end of table
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 42
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1968 ***********************************************************************
+ 1969 * CUSE Operand-1 scan data...
+ 1970 ***********************************************************************
+
+0000180C 1972 DS 0F
+0000180C 98765432 98765432 1973 DC 2048XL4'98765432'
+0000380C 111111F0 111111F0 1974 COP1A DC 256XL4'111111F0'
+
+00003C0C 1976 DS 0F
+00003C0C 98765432 98765432 1977 DC 2048XL4'98765432'
+00005C0C 40404040 40404040 1978 COP1B DC 256XL4'40404040'
+
+0000600C 1980 DS 0F
+0000600C 11223344 11223344 1981 DC 2048XL4'11223344'
+0000800C 40404040 40404040 1982 COP1C DC 256XL4'40404040'
+
+0000840C 1984 DS 0F
+0000840C 11223344 11223344 1985 DC 2048XL4'11223344'
+0000A40C 40404040 40404040 1986 COP1D DC 256XL4'40404040'
+
+
+
+
+ 1988 ***********************************************************************
+ 1989 * CUSE Operand-2 scan data
+ 1990 ***********************************************************************
+
+0000A80C 1992 DS 0F
+0000A80C 89ABCDEF 89ABCDEF 1993 DC 2048XL4'89ABCDEF'
+0000C80C 111111F0 111111F0 1994 COP2A DC 256XL4'111111F0'
+
+0000CC0C 1996 DS 0F
+0000CC0C 89ABCDEF 89ABCDEF 1997 DC 2048XL4'89ABCDEF'
+0000EC0C 40404040 40404040 1998 COP2B DC 256XL4'40404040'
+
+0000F00C 2000 DS 0F
+0000F00C F1223344 F1223344 2001 DC 2048XL4'FF1223344'
+0001100C 40404040 40404040 2002 COP2C DC 256XL4'40404040'
+
+0001140C 2004 DS 0F
+0001140C FF223377 FF223377 2005 DC 2048XL4'FF223377'
+0001340C 40404040 40404040 2006 COP2D DC 256XL4'40404040'
+
+
+
+
+ 2008 ***********************************************************************
+ 2009 * Register equates
+ 2010 ***********************************************************************
+
+
+ 00000000 00000001 2012 R0 EQU 0
+ 00000001 00000001 2013 R1 EQU 1
+ 00000002 00000001 2014 R2 EQU 2
+ 00000003 00000001 2015 R3 EQU 3
+ 00000004 00000001 2016 R4 EQU 4
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 43
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 00000005 00000001 2017 R5 EQU 5
+ 00000006 00000001 2018 R6 EQU 6
+ 00000007 00000001 2019 R7 EQU 7
+ 00000008 00000001 2020 R8 EQU 8
+ 00000009 00000001 2021 R9 EQU 9
+ 0000000A 00000001 2022 R10 EQU 10
+ 0000000B 00000001 2023 R11 EQU 11
+ 0000000C 00000001 2024 R12 EQU 12
+ 0000000D 00000001 2025 R13 EQU 13
+ 0000000E 00000001 2026 R14 EQU 14
+ 0000000F 00000001 2027 R15 EQU 15
+
+
+ 2029 END
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 44
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+BEGIN I 00000200 2 80 46 77 78 209
+CC0T1 F 000005F8 4 288
+CC0T2 F 00000634 4 308
+CC0T3 F 00000670 4 328
+CC0T4 F 000006AC 4 348
+CC0T5 F 000006E8 4 368
+CC0T6 F 00000724 4 388
+CC0T7 F 00000760 4 412
+CC0T8 F 0000079C 4 434
+CC0T9 F 000007D8 4 456
+CC0TA F 00000814 4 480
+CC0TB F 00000850 4 502
+CC0TC F 0000088C 4 526
+CC0TD F 000008C8 4 548
+CC0TE F 00000904 4 570
+CC0TF F 00000940 4 592
+CC1T1 F 0000097C 4 616
+CC1T2 F 000009B8 4 636
+CC1T3 F 000009F4 4 656
+CC1T4 F 00000A30 4 676
+CC1T5 F 00000A6C 4 696
+CC1T6 F 00000AA8 4 716
+CC1T7 F 00000AE4 4 740
+CC1T8 F 00000B20 4 762
+CC1T9 F 00000B5C 4 784
+CC1TA F 00000B98 4 808
+CC1TB F 00000BD4 4 830
+CC1TC F 00000C10 4 854
+CC1TD F 00000C4C 4 876
+CC1TE F 00000C88 4 898
+CC1TF F 00000CC4 4 920
+CC2T1 F 00000D00 4 944
+CC2T2 F 00000D3C 4 964
+CC2T3 F 00000D78 4 984
+CC2T4 F 00000DB4 4 1004
+CC2T5 F 00000DF0 4 1024
+CC2T6 F 00000E2C 4 1044
+CC2T7 F 00000E68 4 1068
+CC2T8 F 00000EA4 4 1090
+CC2T9 F 00000EE0 4 1112
+CC2TA F 00000F1C 4 1136
+CC2TB F 00000F58 4 1158
+CC2TC F 00000F94 4 1182
+CC2TD F 00000FD0 4 1204
+CC2TE F 0000100C 4 1226
+CC2TF F 00001048 4 1248
+CC3T1 F 00001084 4 1272
+CC3T3 F 000010C0 4 1292
+CC3T4 F 000010FC 4 1312
+CC3T7 F 00001138 4 1336
+CC3T8 F 00001174 4 1358
+CC3T9 F 000011B0 4 1380
+COP1A X 0000380C 4 1974 297 317 337 357 377 397 421 443 465 625 645 665 685
+ 705 725 749 771 793 953 973 993 1013 1033 1053 1077 1099
+ 1121 1281 1301 1321 1345 1367 1389 1543 1565 1587 1748 1768 1788
+ 1808 1828 1848 1892 1914 1934 1954
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 45
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+COP1B X 00005C0C 4 1978 489 511 535 557 579 601 817 839 863 885 907 929 1145
+ 1167 1191 1213 1235 1257 1414 1435 1501
+COP1C X 0000800C 4 1982 1461 1481 1610 1632 1654 1868
+COP1D X 0000A40C 4 1986 1521 1677 1699 1721
+COP2A X 0000C80C 4 1994 298 318 338 358 378 398 422 444 466 626 646 666 686
+ 706 726 750 772 794 954 974 994 1014 1034 1054 1078 1100
+ 1122 1282 1302 1322 1346 1368 1390 1544 1566 1588 1749 1769 1789
+ 1809 1829 1849 1893 1915 1935 1955
+COP2B X 0000EC0C 4 1998 490 512 536 558 580 602 818 840 864 886 908 930 1146
+ 1168 1192 1214 1236 1258 1415 1436 1502
+COP2C X 0001100C 4 2002 1462 1482 1611 1633 1655 1869
+COP2D X 0001340C 4 2006 1522 1678 1700 1722
+CUSE1TST J 00000000 79884 41 44 48 52 109 42
+CUSEBC I 000005BE 4 205 171
+CUSECTL A 000005F8 4 282 123
+CUSEDONE I 000005BC 2 203 200
+CUSEFAIL I 000005B8 4 202 181 185 191 195 205
+CUSENEXT U 0000003C 1 272 197
+CUSETEST 4 00000000 60 243 124
+DOAGAIN I 0000056A 4 169 172
+ENDOP1 A 0000002C 4 267 177
+ENDOP2 A 00000034 4 269 187
+EOJ I 000005D8 4 217 103
+EOJPSW D 000005C8 8 215 217
+FAILMASK A 00000028 4 264 160
+FAILPSW D 000005E0 8 219 221
+FAILTEST I 000005F0 4 221 98 101 202
+IMAGE 1 00000000 79884 0
+K U 00000400 1 230 231 232 233 234 235
+K32 U 00008000 1 233 300 301 305 306 320 321 325 326 340 341 345 346 360
+ 361 365 366 380 381 385 386 400 401 405 406 424 425
+ 429 430 446 447 451 452 468 469 473 474 492 493 497
+ 498 514 515 519 520 538 539 543 544 560 561 565 566
+ 582 583 587 588 604 605 609 610 628 629 633 634 648
+ 649 653 654 668 669 673 674 688 689 693 694 708 709
+ 713 714 728 729 733 734 752 753 757 758 774 775 779
+ 780 796 797 801 802 820 821 825 826 842 843 847 848
+ 866 867 871 872 888 889 893 894 910 911 915 916 932
+ 933 937 938 956 957 961 962 976 977 981 982 996 997
+ 1001 1002 1016 1017 1021 1022 1036 1037 1041 1042 1056 1057 1061
+ 1062 1080 1081 1085 1086 1102 1103 1107 1108 1124 1125 1129 1130
+ 1148 1149 1153 1154 1170 1171 1175 1176 1194 1195 1199 1200 1216
+ 1217 1221 1222 1238 1239 1243 1244 1260 1261 1265 1266 1284 1285
+ 1289 1290 1304 1305 1309 1310 1324 1325 1329 1330 1348 1349 1353
+ 1354 1370 1371 1375 1376 1392 1393 1397 1398 1417 1418 1422 1423
+ 1438 1439 1443 1444 1464 1465 1469 1470 1484 1485 1489 1490 1504
+ 1505 1509 1510 1524 1525 1529 1530 1546 1547 1551 1552 1568 1569
+ 1573 1574 1590 1591 1595 1596 1613 1614 1618 1619 1635 1636 1640
+ 1641 1657 1658 1662 1663 1680 1681 1685 1686 1702 1703 1707 1708
+ 1724 1725 1729 1730 1751 1752 1756 1757 1771 1772 1776 1777 1791
+ 1792 1796 1797 1811 1812 1816 1817 1831 1832 1836 1837 1851 1852
+ 1856 1857 1871 1872 1876 1877 1895 1896 1900 1901 1917 1918 1922
+ 1923 1937 1938 1942 1943 1957 1958 1962 1963
+K4 U 00001000 1 232
+K64 U 00010000 1 234
+MB U 00100000 1 235 300 301 305 306 320 321 325 326 340 341 345 346 360
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 46
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+ 361 365 366 380 381 385 386 400 401 405 406 424 425
+ 429 430 446 447 451 452 468 469 473 474 492 493 497
+ 498 514 515 519 520 538 539 543 544 560 561 565 566
+ 582 583 587 588 604 605 609 610 628 629 633 634 648
+ 649 653 654 668 669 673 674 688 689 693 694 708 709
+ 713 714 728 729 733 734 752 753 757 758 774 775 779
+ 780 796 797 801 802 820 821 825 826 842 843 847 848
+ 866 867 871 872 888 889 893 894 910 911 915 916 932
+ 933 937 938 956 957 961 962 976 977 981 982 996 997
+ 1001 1002 1016 1017 1021 1022 1036 1037 1041 1042 1056 1057 1061
+ 1062 1080 1081 1085 1086 1102 1103 1107 1108 1124 1125 1129 1130
+ 1148 1149 1153 1154 1170 1171 1175 1176 1194 1195 1199 1200 1216
+ 1217 1221 1222 1238 1239 1243 1244 1260 1261 1265 1266 1284 1285
+ 1289 1290 1304 1305 1309 1310 1324 1325 1329 1330 1348 1349 1353
+ 1354 1370 1371 1375 1376 1392 1393 1397 1398 1417 1418 1422 1423
+ 1438 1439 1443 1444 1464 1465 1469 1470 1484 1485 1489 1490 1504
+ 1505 1509 1510 1524 1525 1529 1530 1546 1547 1551 1552 1568 1569
+ 1573 1574 1590 1591 1595 1596 1613 1614 1618 1619 1635 1636 1640
+ 1641 1657 1658 1662 1663 1680 1681 1685 1686 1702 1703 1707 1708
+ 1724 1725 1729 1730 1751 1752 1756 1757 1771 1772 1776 1777 1791
+ 1792 1796 1797 1811 1812 1816 1817 1831 1832 1836 1837 1851 1852
+ 1856 1857 1871 1872 1876 1877 1895 1896 1900 1901 1917 1918 1922
+ 1923 1937 1938 1942 1943 1957 1958 1962 1963
+OP1LEN F 0000001C 4 259 135 139
+OP1WHERE A 00000018 4 258 134
+OP2LEN F 00000024 4 261 148 152
+OP2WHERE A 00000020 4 260 147
+OPSWHERE U 00000018 1 257 166
+PAD X 00000005 1 248 164
+PAD4T1 F 000011EC 4 1405
+PAD4T2 F 00001228 4 1426
+PAGE U 00001000 1 231
+PTE1 F 00001570 4 1739
+PTE2 F 000015AC 4 1759
+PTE3 F 000015E8 4 1779
+PTE4 F 00001624 4 1799
+PTE5 F 00001660 4 1819
+PTE6 F 0000169C 4 1839
+PTE7 F 000016D8 4 1859
+PTF1 F 00001714 4 1883
+PTF2 F 00001750 4 1905
+PTF3 F 0000178C 4 1925
+PTF4 F 000017C8 4 1945
+R0 U 00000000 1 2012 42 163
+R1 U 00000001 1 2013 164
+R10 U 0000000A 1 2022 127 128 136 137 138 140 149 150 151 153 177 180 187
+ 190
+R11 U 0000000B 1 2023 139 152 160 161 171 177 184 187 194
+R12 U 0000000C 1 2024
+R13 U 0000000D 1 2025
+R14 U 0000000E 1 2026 91 202 203
+R15 U 0000000F 1 2027 208
+R2 U 00000002 1 2014 134 140 142 143 166 169 180
+R3 U 00000003 1 2015 135 137 184
+R4 U 00000004 1 2016 147 153 155 156 169 190
+R5 U 00000005 1 2017 148 150 166 194
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 47
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+R6 U 00000006 1 2018 123 124 197 198 207
+R7 U 00000007 1 2019
+R8 U 00000008 1 2020 77 80 81 82 84 209
+R9 U 00000009 1 2021 78 84 85
+REG2LOW U 000000DD 1 275
+REG2PATT U AABBCCDD 1 274
+SC5T1 F 00001264 4 1452
+SC5T2 F 000012A0 4 1472
+SC5T3 F 000012DC 4 1492
+SC5T4 F 00001318 4 1512
+SC5T5 F 00001354 4 1534
+SC5T6 F 00001390 4 1556
+SC5T7 F 000013CC 4 1578
+SC5T8 F 00001408 4 1601
+SC5T9 F 00001444 4 1623
+SC5TA F 00001480 4 1645
+SC5TB F 000014BC 4 1668
+SC5TC F 000014F8 4 1690
+SC5TD F 00001534 4 1712
+SS1ADDR A 00000008 4 252 136
+SS1LAST X 00000006 1 249 143
+SS1LEN A 0000000C 4 253 138
+SS2ADDR A 00000010 4 254 149
+SS2LAST X 00000007 1 250 156
+SS2LEN A 00000014 4 255 151
+SSLEN R 00000004 1 247 163
+SUBTEST X 00000401 1 113 100 168 179 183 189 193
+TEST01 I 00000502 4 121 91
+TESTADDR D 00000400 8 111
+TESTNUM X 00000400 1 112 97 121 128
+TNUM X 00000000 1 244 127
+TST1LOOP U 0000050A 1 126 199
+=F'0' F 000005F4 4 228 198
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 48
+
+MACRO DEFN REFERENCES
+
+No defined macros
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 49
+
+ DESC SYMBOL SIZE POS ADDR
+
+Entry: 0
+
+Image IMAGE 79884 00000-1380B 00000-1380B
+ Region 79884 00000-1380B 00000-1380B
+ CSECT CUSE1TST 79884 00000-1380B 00000-1380B
+ASMA Ver. 0.2.1 CUSE-01-basic (Test CUSE instruction) 09 Nov 2022 15:53:17 Page 50
+
+ STMT FILE NAME
+
+1 /devstor/dev/tests/CUSE-01-basic.asm
+
+
+** NO ERRORS FOUND **
+
+
\ No newline at end of file
diff --git a/tests/CUSE-01-basic.pdf b/tests/CUSE-01-basic.pdf
new file mode 100644
index 000000000..ba97dd33f
Binary files /dev/null and b/tests/CUSE-01-basic.pdf differ
diff --git a/tests/CUSE-01-basic.tst b/tests/CUSE-01-basic.tst
new file mode 100644
index 000000000..ea36ea81b
--- /dev/null
+++ b/tests/CUSE-01-basic.tst
@@ -0,0 +1,17 @@
+*Testcase CUSE-01-basic (Test CUSE instruction)
+
+# ---------------------------------------------------------------------
+# This tests only the basic function of the CUSE instruction.
+# Specification Exceptions are NOT tested.
+# ---------------------------------------------------------------------
+
+mainsize 16
+numcpu 1
+sysclear
+archlvl z/Arch
+
+loadcore "$(testpath)/CUSE-01-basic.core" 0x0
+
+runtest 1
+
+*Done
diff --git a/tests/CUSE-02-performance.asm b/tests/CUSE-02-performance.asm
new file mode 100644
index 000000000..faac99f5e
--- /dev/null
+++ b/tests/CUSE-02-performance.asm
@@ -0,0 +1,680 @@
+ TITLE ' CUSE-02-performance (Test CUSE instructions)'
+***********************************************************************
+*
+* CUSE Performance instruction tests
+*
+***********************************************************************
+*
+* This program ONLY tests the performance of the CUSE instructions.
+*
+*
+* ********************
+* ** IMPORTANT! **
+* ********************
+*
+* This test uses the Hercules Diagnose X'008' interface
+* to display messages and thus your .tst runtest script
+* MUST contain a "DIAG8CMD ENABLE" statement within it!
+*
+*
+* NOTE: This test is based on the CLCL-et-al Test but modified to
+* only test the CUSE instruction. -- James Wekel November 2022
+*
+***********************************************************************
+*
+* Example Hercules Testcase:
+*
+*
+* *Testcase CUSE-02-performance (Test CUSE instructions)
+*
+* mainsize 16
+* numcpu 1
+* sysclear
+* archlvl z/Arch
+* loadcore "$(testpath)/CUSE-02-performance.core" 0x0
+* diag8cmd enable # (needed for messages to Hercules console)
+* #r 408=ff # (enable timing tests)
+* runtest 500 # (test duration, depends on host)
+* diag8cmd disable # (reset back to default)
+* *Done
+*
+*
+***********************************************************************
+ EJECT
+***********************************************************************
+*
+* Tests:
+* Both opernand-1 and operand-2 cross a page boundary.
+*
+* 1. CUSE of 512 bytes - substring length 1
+* 2. CUSE of 512 bytes - substring length 4
+* 3. CUSE of 512 bytes - substring length 8
+* 4. CUSE of 512 bytes - substring length 32
+* 5. CUSE of 512 bytes - substring length 32 (different strings)
+* 6. CUSE of 4160 (4096+64) bytes - substring length 32
+* which results in a CC=3, and a branch back
+* to complete the CUSE instruction.
+*
+***********************************************************************
+ SPACE 3
+CUSE2TST START 0
+ USING CUSE2TST,R0 Low core addressability
+ SPACE 4
+ ORG CUSE2TST+X'1A0' z/Architecure RESTART PSW
+ DC X'0000000180000000'
+ DC AD(BEGIN)
+ SPACE 2
+ ORG CUSE2TST+X'1D0' z/Architecure PROGRAM CHECK PSW
+ DC X'0002000180000000'
+ DC AD(X'DEAD')
+ SPACE 4
+ ORG CUSE2TST+X'200' Start of actual test program...
+ EJECT
+***********************************************************************
+* The actual "CUSE2TST" program itself...
+***********************************************************************
+*
+* Architecture Mode: z/Arch
+* Register Usage:
+*
+* R0 (work)
+* R1 (work)
+* R2 (work) or MSG subroutine call
+* R3 (work)
+* R4 (work)
+* R6 CUSETEST Base (of current test)
+* R7 (work)
+* R8 First base register
+* R9 Second base register
+* R10-R13 (work)
+* R14 Subroutine call
+* R15 Secondary Subroutine call or work
+*
+***********************************************************************
+ SPACE
+ USING BEGIN,R8 FIRST Base Register
+ USING BEGIN+4096,R9 SECOND Base Register
+ SPACE
+BEGIN BALR R8,0 Initalize FIRST base register
+ BCTR R8,0 Initalize FIRST base register
+ BCTR R8,0 Initalize FIRST base register
+ SPACE
+ LA R9,2048(,R8) Initalize SECOND base register
+ LA R9,2048(,R9) Initalize SECOND base register
+ SPACE
+***********************************************************************
+* Run the performance test(s)...
+***********************************************************************
+ SPACE
+ BAL R14,TEST91 Time CUSE instruction (speed test)
+ SPACE 2
+***********************************************************************
+* Test for normal or unexpected test completion...
+***********************************************************************
+ SPACE
+ CLI TIMEOPT,X'FF' Was this a timing run?
+ BNE EOJ No, timing run; just go end normally
+ SPACE
+ CLI TESTNUM,X'F4' Did we end on expected test?
+ BNE FAILTEST No?! Then FAIL the test!
+ SPACE
+ CLI SUBTEST,X'99' Did we end on expected SUB-test?
+ BNE FAILTEST No?! Then FAIL the test!
+ SPACE
+ B EOJ Yes, then normal completion!
+ EJECT
+***********************************************************************
+* Fixed test storage locations ...
+***********************************************************************
+ SPACE 2
+ ORG CUSE2TST+X'400'
+ SPACE 4
+TESTADDR DS 0D Where test/subtest numbers will go
+TESTNUM DC X'99' Test number of active test
+SUBTEST DC X'99' Active test sub-test number
+ SPACE 2
+ DS 0D
+TIMEOPT DC X'00' Set to non-zero to run timing tests
+ SPACE 2
+ DS 0D
+SAVE2T5 DC 4F'0'
+SAVER2 DC F'0'
+SAVER6 DC F'0'
+ SPACE 4
+ ORG *+X'100'
+ EJECT
+***********************************************************************
+* TEST91 Time CUSE instruction (speed test)
+***********************************************************************
+ SPACE
+TEST91 TM TIMEOPT,X'FF' Is timing tests option enabled?
+ BZR R14 No, skip timing tests
+ SPACE
+ LA R6,CUSEPERF Point R5 --> testing control table
+ USING CUSETEST,R6 What each table entry looks like
+ SPACE
+TST91LOP EQU *
+ ST R6,SAVER6 Save current pref table base
+ SPACE
+ IC R7,TNUM Set test number
+ STC R7,TESTNUM
+*
+** Initialize operand data (move data to testing address)
+*
+* Build Operand-1
+ SPACE
+ L R2,OP1WHERE Where to move operand-1 data to
+ L R3,OP1LEN Get operand-1 length
+ L R10,SS1ADDR Calculate OP 1 starting
+ SR R10,R3 address
+ A R10,SS1LEN
+ L R11,OP1LEN
+ MVCL R2,R10
+ SPACE
+ BCTR R2,0 less one for last char addr
+ MVC 0(0,R2),SS1LAST set last char
+ SPACE
+* Build Operand-2
+ SPACE
+ L R4,OP2WHERE Where to move operand-1 data to
+ L R5,OP2LEN Get operand-1 length
+ L R10,SS2ADDR Calculate OP 2 starting
+ SR R10,R5 address
+ A R10,SS2LEN
+ L R11,OP2LEN
+ MVCL R4,R10
+ SPACE
+ BCTR R4,0 less one for last char addr
+ MVC 0(0,R4),SS2LAST set last char
+ SPACE
+* Set Substring length and pad byte
+ SPACE
+ IC R0,SSLEN Set SS length
+ IC R1,PAD Set SS Pad byte
+ EJECT
+***********************************************************************
+* Define come helpful macros to ensure our counts are correct
+***********************************************************************
+ SPACE 4
+ MACRO
+ OVERONLY &NUM &NUM = number of sets
+ LCLA &CTR
+&CTR SETA &NUM
+.LOOP ANOP
+.*
+*
+ LM R2,R5,OPSWHERE
+ BC B'0001',*+4
+.*
+&CTR SETA &CTR-1
+ AIF (&CTR GT 0).LOOP
+ MEND
+ SPACE 5
+ MACRO
+ DOINSTR &NUM &NUM = number of sets
+ LCLA &CTR
+&CTR SETA &NUM
+.LOOP ANOP
+.*
+*
+ LM R2,R5,OPSWHERE
+ CUSE R2,R4
+ BC B'0001',*-4
+.*
+&CTR SETA &CTR-1
+ AIF (&CTR GT 0).LOOP
+ MEND
+ EJECT
+***********************************************************************
+* Next, time the overhead...
+***********************************************************************
+ SPACE
+ L R7,NUMLOOPS
+ STCK BEGCLOCK
+ STM R2,R5,SAVE2T5
+ BALR R10,0
+* 100 sets of overhead
+ OVERONLY 2 (first 2)
+ SPACE
+* .........ETC.........
+ SPACE
+ PRINT OFF
+ OVERONLY 96 (3-98)
+ PRINT ON
+ SPACE
+ OVERONLY 2 (last 2)
+ SPACE
+ BCTR R7,R10
+ STCK ENDCLOCK
+ BAL R15,CALCDUR
+ MVC OVERHEAD,DURATION
+ EJECT
+***********************************************************************
+* Now do the actual timing run...
+***********************************************************************
+ SPACE
+ L R7,NUMLOOPS
+ STCK BEGCLOCK
+ BALR R10,0
+* 100 sets of instructions
+ DOINSTR 2 (first 2)
+ SPACE
+* .........ETC.........
+ SPACE
+ PRINT OFF
+ DOINSTR 96 (3-98)
+ PRINT ON
+ SPACE
+ DOINSTR 2 (last 2)
+ SPACE
+ BCTR R7,R10
+ STCK ENDCLOCK
+ SPACE
+ LM R2,R5,SAVE2T5
+ MVC PRTLINE+33(5),=CL5'CUSE'
+ BAL R15,RPTSPEED
+*
+** More performance tests?
+*
+ L R6,SAVER6 Restore perf table base
+ LA R6,CUSENEXT Go on to next table entry
+ CLC =F'0',0(R6) End of table?
+ BNE TST91LOP No, loop...
+ BR R14 Return to caller or FAILTEST
+ EJECT
+***********************************************************************
+* RPTSPEED Report instruction speed
+***********************************************************************
+ SPACE
+RPTSPEED ST R15,RPTSAVE Save return address
+ STM R5,R7,RPTSVR5T7 Save R5-7
+ SPACE
+ BAL R15,CALCDUR Calculate duration
+ SPACE
+ LA R5,OVERHEAD Subtract overhead
+ LA R6,DURATION From raw timing
+ LA R7,DURATION Yielding true instruction timing
+ BAL R15,SUBDWORD Do it
+ SPACE
+ LM R10,R11,DURATION Convert to...
+ SRDL R10,12 ... microseconds
+ SPACE
+ CVD R10,TICKSAAA Convert HIGH part to decimal
+ CVD R11,TICKSBBB Convert LOW part to decimal
+ SPACE
+ ZAP TICKSTOT,TICKSAAA Calculate...
+ MP TICKSTOT,=P'4294967296' ...decimal...
+ AP TICKSTOT,TICKSBBB ...microseconds
+ SPACE
+ MVC PRTLINE+43(L'EDIT),EDIT (edit into...
+ ED PRTLINE+43(L'EDIT),TICKSTOT+3 ...print line)
+ SPACE 3
+*
+* Use Hercules Diagnose for Message to console
+*
+ STM R0,R2,RPTDWSAV Save regs used by MSG
+ LA R0,PRTLNG Message length
+ LA R1,PRTLINE Message address
+ BAL R2,MSG Call Hercules console MSG display
+ LM R0,R2,RPTDWSAV Restore regs
+ SPACE 2
+ LM R5,R7,RPTSVR5T7 Restore R5-7
+ L R15,RPTSAVE Restore return address
+ BR R15 Return to caller
+ SPACE
+RPTSAVE DC F'0' R15 save area
+RPTSVR5T7 DC 3F'0' R5-R7 save area
+ SPACE
+RPTDWSAV DC 2D'0' R0-R2 save area for MSG call
+ EJECT
+***********************************************************************
+* CALCDUR Calculate DURATION
+***********************************************************************
+ SPACE
+CALCDUR ST R15,CALCRET Save return address
+ STM R5,R7,CALCWORK Save work registers
+ SPACE
+ LM R6,R7,BEGCLOCK Remove CPU number from clock value
+ SRDL R6,6 "
+ SLDL R6,6 "
+ STM R6,R7,BEGCLOCK "
+ SPACE
+ LM R6,R7,ENDCLOCK Remove CPU number from clock value
+ SRDL R6,6 "
+ SLDL R6,6 "
+ STM R6,R7,ENDCLOCK "
+ SPACE
+ LA R5,BEGCLOCK Starting time
+ LA R6,ENDCLOCK Ending time
+ LA R7,DURATION Difference
+ BAL R15,SUBDWORD Calculate duration
+ SPACE
+ LM R5,R7,CALCWORK Restore work registers
+ L R15,CALCRET Restore return address
+ BR R15 Return to caller
+ SPACE
+CALCRET DC F'0' R15 save area
+CALCWORK DC 3F'0' R5-R7 save area
+ SPACE 4
+***********************************************************************
+* SUBDWORD Subtract two doublewords
+* R5 --> subtrahend, R6 --> minuend, R7 --> result
+***********************************************************************
+ SPACE
+SUBDWORD STM R1,R4,SUBDWSAV Save registers
+ SPACE
+ LM R1,R2,0(R5) Subtrahend (value to subtract)
+ LM R3,R4,0(R6) Minuend (what to subtract FROM)
+ SLR R4,R2 Subtract LOW part
+ BNM *+4+4 (branch if no borrow)
+ SL R3,=F'1' (otherwise do borrow)
+ SLR R3,R1 Subtract HIGH part
+ STM R3,R4,0(R7) Store results
+ SPACE
+ LM R1,R4,SUBDWSAV Restore registers
+ BR R15 Return to caller
+ SPACE
+SUBDWSAV DC 2D'0' R1-R4 save area
+ EJECT
+***********************************************************************
+* Issue HERCULES MESSAGE pointed to by R1, length in R0
+* R2 = return address
+***********************************************************************
+ SPACE
+MSG CH R0,=H'0' Do we even HAVE a message?
+ BNHR R2 No, ignore
+ SPACE
+ STM R0,R2,MSGSAVE Save registers
+ SPACE
+ CH R0,=AL2(L'MSGMSG) Message length within limits?
+ BNH MSGOK Yes, continue
+ LA R0,L'MSGMSG No, set to maximum
+ SPACE
+MSGOK LR R2,R0 Copy length to work register
+ BCTR R2,0 Minus-1 for execute
+ EX R2,MSGMVC Copy message to O/P buffer
+ SPACE
+ LA R2,1+L'MSGCMD(,R2) Calculate true command length
+ LA R1,MSGCMD Point to true command
+ SPACE
+ DC X'83',X'12',X'0008' Issue Hercules Diagnose X'008'
+ BZ MSGRET Return if successful
+ DC H'0' CRASH for debugging purposes
+ SPACE
+MSGRET LM R0,R2,MSGSAVE Restore registers
+ BR R2 Return to caller
+ SPACE 6
+MSGSAVE DC 3F'0' Registers save area
+MSGMVC MVC MSGMSG(0),0(R1) Executed instruction
+ SPACE 2
+MSGCMD DC C'MSGNOH * ' *** HERCULES MESSAGE COMMAND ***
+MSGMSG DC CL95' ' The message text to be displayed
+ EJECT
+***********************************************************************
+* Normal completion or Abnormal termination PSWs
+***********************************************************************
+ SPACE 2
+EOJPSW DC 0D'0',X'0002000180000000',AD(0)
+ SPACE
+EOJ LPSWE EOJPSW Normal completion
+ SPACE 3
+FAILPSW DC 0D'0',X'0002000180000000',AD(X'BAD')
+ SPACE
+FAILTEST LPSWE FAILPSW Abnormal termination
+ SPACE 4
+***********************************************************************
+* Working Storage
+***********************************************************************
+ SPACE
+ LTORG , Literals pool
+ SPACE 2
+K EQU 1024 One KB
+PAGE EQU (4*K) Size of one page
+K32 EQU (32*K) 32 KB
+K64 EQU (64*K) 64 KB
+MB EQU (K*K) 1 MB
+ SPACE
+NUMLOOPS DC F'10000' 10,000 * 100 = 1,000,000
+ SPACE
+BEGCLOCK DC 0D'0',8X'BB' Begin
+ENDCLOCK DC 0D'0',8X'EE' End
+DURATION DC 0D'0',8X'DD' Diff
+OVERHEAD DC 0D'0',8X'FF' Overhead
+ SPACE
+TICKSAAA DC PL8'0' Clock ticks high part
+TICKSBBB DC PL8'0' Clock ticks low part
+TICKSTOT DC PL8'0' Total clock ticks
+ SPACE
+PRTLINE DC C' 1,000,000 iterations of XXXXX'
+ DC C' took 999,999,999 microseconds'
+PRTLNG EQU *-PRTLINE
+EDIT DC X'402020206B2020206B202120'
+ EJECT
+***********************************************************************
+* CUSETEST DSECT
+***********************************************************************
+ SPACE 2
+CUSETEST DSECT ,
+TNUM DC X'00' CUSE table number
+ DC XL3'00'
+ SPACE 2
+SSLEN DC AL1(0) CUSE - SS length
+PAD DC X'00' CUSE - Pad byte
+SS1LAST DC X'00' First-Operand SS last byte
+SS2LAST DC X'00' Second-Operand SS last byte
+ SPACE 2
+SS1ADDR DC A(0) First-Operand SS Address
+SS1LEN DC A(0) First-Operand SS length
+SS2ADDR DC A(0) Second-Operand SS Address
+SS2LEN DC A(0) Second-Operand SS length
+ SPACE 2
+OPSWHERE EQU *
+OP1WHERE DC A(0) Where Operand-1 data should be placed
+OP1LEN DC F'0' CUSE - First-Operand Length
+OP2WHERE DC A(0) Where Operand-2 data should be placed
+OP2LEN DC F'0' CUSE - Second-Operand Length
+
+ SPACE 2
+FAILMASK DC A(0) Failure Branch on Condition mask
+ SPACE 2
+* Ending register values
+ENDOP1 DC A(0) Operand 1 address
+ DC A(0) Operand 1 length
+ENDOP2 DC A(0) Operand 2 address
+ DC A(0) Operand 2 length
+ SPACE 2
+CUSENEXT EQU * Start of next table entry...
+ SPACE 6
+REG2PATT EQU X'AABBCCDD' Polluted Register pattern
+REG2LOW EQU X'DD' (last byte above)
+ EJECT
+***********************************************************************
+* CUSE Performace Test data...
+***********************************************************************
+ SPACE
+CUSE2TST CSECT ,
+CUSEPERF DC 0A(0) Start of table
+ SPACE 2
+***********************************************************************
+* performance test data
+***********************************************************************
+ SPACE
+* Cross page bounday - operand-1 and operand-2
+ SPACE
+PTE6 DS 0F
+ DC X'E6' Test Num
+ DC XL3'00'
+*
+ DC AL1(1) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(11*MB+(6*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(6*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(11*MB+(6*K32)+(512-32)-96),A(032) OP-1
+ DC A(12*MB+(6*K32)+(512-32)-128),A(032) OP-2
+ SPACE 2
+PTE1 DS 0F
+ DC X'E1' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'EE' First-Operand SS last byte
+ DC X'EE' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(004) Op-1 SS & length
+ DC A(COP2A),A(004) OP-2 SS & length
+* Target
+ DC A(11*MB+(1*K32)-63),A(512) Op-1 & length
+ DC A(12*MB+(1*K32)-56),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(11*MB+(1*K32)-63+(512-4)),A(004) OP-1
+ DC A(12*MB+(1*K32)-56+(512-4)),A(004) OP-2
+ SPACE
+PTE2 DS 0F
+ DC X'E2' Test Num
+ DC XL3'00'
+*
+ DC AL1(8) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(008) Op-1 SS & length
+ DC A(COP2A),A(008) OP-2 SS & length
+* Target
+ DC A(11*MB+(2*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(2*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(11*MB+(2*K32)+(512-8)-96),A(008) OP-1
+ DC A(12*MB+(2*K32)+(512-8)-128),A(008) OP-2
+ SPACE 2
+PTF2 DS 0F
+ DC X'F2' Test Num
+ DC XL3'00'
+*
+ DC AL1(32) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(13*MB+(2*K32)-96),A(512) Op-1 & length
+ DC A(14*MB+(2*K32)-128),A(512) Op-2 & length
+*
+ DC A(7) CC0 Fail mask
+* Ending register values
+ DC A(13*MB+(2*K32)+(512-32)-96),A(032) OP-1
+ DC A(14*MB+(2*K32)+(512-32)-128),A(032) OP-2
+ SPACE 2
+PTE7 DS 0F
+ DC X'E7' Test Num
+ DC XL3'00'
+*
+ DC AL1(4) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1C),A(032) Op-1 SS & length
+ DC A(COP2C),A(032) OP-2 SS & length
+* Target
+ DC A(11*MB+(7*K32)-96),A(512) Op-1 & length
+ DC A(12*MB+(7*K32)-128),A(512) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(11*MB+(7*K32)+(512-32)-96-3),A(032+3) OP-1
+ DC A(12*MB+(7*K32)+(512-32)-128-3),A(032+3) OP-2
+ SPACE 2
+PTF4 DS 0F
+ DC X'F4' Test Num
+ DC XL3'00'
+*
+ DC AL1(32) SS Length
+ DC X'00' Pad Byte
+ DC X'77' First-Operand SS last byte
+ DC X'77' Second-Operand SS last byte
+* Source
+ DC A(COP1A),A(032) Op-1 SS & length
+ DC A(COP2A),A(032) OP-2 SS & length
+* Target
+ DC A(13*MB+(4*K32)-96),A(4096-128) Op-1 & length
+ DC A(14*MB+(4*K32)-128),A(4096-128) Op-2 & length
+*
+ DC A(6) not CC0 or CC3 Fail mask
+* Ending register values
+ DC A(13*MB+(4*K32)+(4096-128-32)-96),A(032) OP-1
+ DC A(14*MB+(4*K32)+(4096-128-32)-128),A(032) OP-2
+ SPACE 3
+ DC A(0) end of table
+ DC A(0) end of table
+ EJECT
+***********************************************************************
+* CUSE Operand-1 scan data...
+***********************************************************************
+ SPACE
+ DS 0F
+ DC 2048XL4'98765432'
+COP1A DC 256XL4'111111F0'
+ SPACE
+ DS 0F
+ DC 2048XL4'98765432'
+COP1B DC 256XL4'40404040'
+ SPACE
+ DS 0F
+ DC 2048XL4'11223344'
+COP1C DC 256XL4'40404040'
+ SPACE 4
+***********************************************************************
+* CUSE Operand-2 scan data
+***********************************************************************
+ SPACE
+ DS 0F
+ DC 2048XL4'89ABCDEF'
+COP2A DC 256XL4'111111F0'
+ SPACE
+ DS 0F
+ DC 2048XL4'89ABCDEF'
+COP2B DC 256XL4'40404040'
+ SPACE
+ DS 0F
+ DC 2048XL4'FF223344'
+COP2C DC 256XL4'40404040'
+ SPACE 4
+***********************************************************************
+* Register equates
+***********************************************************************
+ SPACE 2
+R0 EQU 0
+R1 EQU 1
+R2 EQU 2
+R3 EQU 3
+R4 EQU 4
+R5 EQU 5
+R6 EQU 6
+R7 EQU 7
+R8 EQU 8
+R9 EQU 9
+R10 EQU 10
+R11 EQU 11
+R12 EQU 12
+R13 EQU 13
+R14 EQU 14
+R15 EQU 15
+ SPACE 2
+ END
diff --git a/tests/CUSE-02-performance.core b/tests/CUSE-02-performance.core
new file mode 100644
index 000000000..5fc4c62e7
Binary files /dev/null and b/tests/CUSE-02-performance.core differ
diff --git a/tests/CUSE-02-performance.list b/tests/CUSE-02-performance.list
new file mode 100644
index 000000000..6d4099f62
--- /dev/null
+++ b/tests/CUSE-02-performance.list
@@ -0,0 +1,1054 @@
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 1
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 2 ***********************************************************************
+ 3 *
+ 4 * CUSE Performance instruction tests
+ 5 *
+ 6 ***********************************************************************
+ 7 *
+ 8 * This program ONLY tests the performance of the CUSE instructions.
+ 9 *
+ 10 *
+ 11 * ********************
+ 12 * ** IMPORTANT! **
+ 13 * ********************
+ 14 *
+ 15 * This test uses the Hercules Diagnose X'008' interface
+ 16 * to display messages and thus your .tst runtest script
+ 17 * MUST contain a "DIAG8CMD ENABLE" statement within it!
+ 18 *
+ 19 *
+ 20 * NOTE: This test is based on the CLCL-et-al Test but modified to
+ 21 * only test the CUSE instruction. -- James Wekel November 2022
+ 22 *
+ 23 ***********************************************************************
+ 24 *
+ 25 * Example Hercules Testcase:
+ 26 *
+ 27 *
+ 28 * *Testcase CUSE-02-performance (Test CUSE instructions)
+ 29 *
+ 30 * mainsize 16
+ 31 * numcpu 1
+ 32 * sysclear
+ 33 * archlvl z/Arch
+ 34 * loadcore "$(testpath)/CUSE-02-performance.core" 0x0
+ 35 * diag8cmd enable # (needed for messages to Hercules console)
+ 36 * #r 408=ff # (enable timing tests)
+ 37 * runtest 500 # (test duration, depends on host)
+ 38 * diag8cmd disable # (reset back to default)
+ 39 * *Done
+ 40 *
+ 41 *
+ 42 ***********************************************************************
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 2
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 44 ***********************************************************************
+ 45 *
+ 46 * Tests:
+ 47 * Both opernand-1 and operand-2 cross a page boundary.
+ 48 *
+ 49 * 1. CUSE of 512 bytes - substring length 1
+ 50 * 2. CUSE of 512 bytes - substring length 4
+ 51 * 3. CUSE of 512 bytes - substring length 8
+ 52 * 4. CUSE of 512 bytes - substring length 32
+ 53 * 5. CUSE of 512 bytes - substring length 32 (different strings)
+ 54 * 6. CUSE of 4160 (4096+64) bytes - substring length 32
+ 55 * which results in a CC=3, and a branch back
+ 56 * to complete the CUSE instruction.
+ 57 *
+ 58 ***********************************************************************
+
+
+
+ 00000000 0000E9AF 60 CUSE2TST START 0
+00000000 00000000 61 USING CUSE2TST,R0 Low core addressability
+
+
+
+
+00000000 00000000 000001A0 63 ORG CUSE2TST+X'1A0' z/Architecure RESTART PSW
+000001A0 00000001 80000000 64 DC X'0000000180000000'
+000001A8 00000000 00000200 65 DC AD(BEGIN)
+
+
+000001B0 000001B0 000001D0 67 ORG CUSE2TST+X'1D0' z/Architecure PROGRAM CHECK PSW
+000001D0 00020001 80000000 68 DC X'0002000180000000'
+000001D8 00000000 0000DEAD 69 DC AD(X'DEAD')
+
+
+
+
+000001E0 000001E0 00000200 71 ORG CUSE2TST+X'200' Start of actual test program...
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 3
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 73 ***********************************************************************
+ 74 * The actual "CUSE2TST" program itself...
+ 75 ***********************************************************************
+ 76 *
+ 77 * Architecture Mode: z/Arch
+ 78 * Register Usage:
+ 79 *
+ 80 * R0 (work)
+ 81 * R1 (work)
+ 82 * R2 (work) or MSG subroutine call
+ 83 * R3 (work)
+ 84 * R4 (work)
+ 85 * R6 CUSETEST Base (of current test)
+ 86 * R7 (work)
+ 87 * R8 First base register
+ 88 * R9 Second base register
+ 89 * R10-R13 (work)
+ 90 * R14 Subroutine call
+ 91 * R15 Secondary Subroutine call or work
+ 92 *
+ 93 ***********************************************************************
+
+00000200 00000200 95 USING BEGIN,R8 FIRST Base Register
+00000200 00001200 96 USING BEGIN+4096,R9 SECOND Base Register
+
+00000200 0580 98 BEGIN BALR R8,0 Initalize FIRST base register
+00000202 0680 99 BCTR R8,0 Initalize FIRST base register
+00000204 0680 100 BCTR R8,0 Initalize FIRST base register
+
+00000206 4190 8800 00000800 102 LA R9,2048(,R8) Initalize SECOND base register
+0000020A 4190 9800 00000800 103 LA R9,2048(,R9) Initalize SECOND base register
+
+ 105 ***********************************************************************
+ 106 * Run the performance test(s)...
+ 107 ***********************************************************************
+
+0000020E 45E0 8328 00000528 109 BAL R14,TEST91 Time CUSE instruction (speed test)
+
+
+ 111 ***********************************************************************
+ 112 * Test for normal or unexpected test completion...
+ 113 ***********************************************************************
+
+00000212 95FF 8208 00000408 115 CLI TIMEOPT,X'FF' Was this a timing run?
+00000216 4770 8D80 00000F80 116 BNE EOJ No, timing run; just go end normally
+
+0000021A 95F4 8200 00000400 118 CLI TESTNUM,X'F4' Did we end on expected test?
+0000021E 4770 8D98 00000F98 119 BNE FAILTEST No?! Then FAIL the test!
+
+00000222 9599 8201 00000401 121 CLI SUBTEST,X'99' Did we end on expected SUB-test?
+00000226 4770 8D98 00000F98 122 BNE FAILTEST No?! Then FAIL the test!
+
+0000022A 47F0 8D80 00000F80 124 B EOJ Yes, then normal completion!
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 4
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 126 ***********************************************************************
+ 127 * Fixed test storage locations ...
+ 128 ***********************************************************************
+
+
+0000022E 0000022E 00000400 130 ORG CUSE2TST+X'400'
+
+
+
+
+00000400 132 TESTADDR DS 0D Where test/subtest numbers will go
+00000400 99 133 TESTNUM DC X'99' Test number of active test
+00000401 99 134 SUBTEST DC X'99' Active test sub-test number
+
+
+00000408 136 DS 0D
+00000408 00 137 TIMEOPT DC X'00' Set to non-zero to run timing tests
+
+
+00000410 139 DS 0D
+00000410 00000000 00000000 140 SAVE2T5 DC 4F'0'
+00000420 00000000 141 SAVER2 DC F'0'
+00000424 00000000 142 SAVER6 DC F'0'
+
+
+
+
+00000428 00000428 00000528 144 ORG *+X'100'
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 5
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 146 ***********************************************************************
+ 147 * TEST91 Time CUSE instruction (speed test)
+ 148 ***********************************************************************
+
+00000528 91FF 8208 00000408 150 TEST91 TM TIMEOPT,X'FF' Is timing tests option enabled?
+0000052C 078E 151 BZR R14 No, skip timing tests
+
+0000052E 4160 8E40 00001040 153 LA R6,CUSEPERF Point R5 --> testing control table
+00000532 00000000 154 USING CUSETEST,R6 What each table entry looks like
+
+ 00000532 00000001 156 TST91LOP EQU *
+00000532 5060 8224 00000424 157 ST R6,SAVER6 Save current pref table base
+
+00000536 4370 6000 00000000 159 IC R7,TNUM Set test number
+0000053A 4270 8200 00000400 160 STC R7,TESTNUM
+ 161 *
+ 162 ** Initialize operand data (move data to testing address)
+ 163 *
+ 164 * Build Operand-1
+
+0000053E 5820 6018 00000018 166 L R2,OP1WHERE Where to move operand-1 data to
+00000542 5830 601C 0000001C 167 L R3,OP1LEN Get operand-1 length
+00000546 58A0 6008 00000008 168 L R10,SS1ADDR Calculate OP 1 starting
+0000054A 1BA3 169 SR R10,R3 address
+0000054C 5AA0 600C 0000000C 170 A R10,SS1LEN
+00000550 58B0 601C 0000001C 171 L R11,OP1LEN
+00000554 0E2A 172 MVCL R2,R10
+
+00000556 0620 174 BCTR R2,0 less one for last char addr
+00000558 D200 2000 6006 00000000 00000006 175 MVC 0(0,R2),SS1LAST set last char
+
+ 177 * Build Operand-2
+
+0000055E 5840 6020 00000020 179 L R4,OP2WHERE Where to move operand-1 data to
+00000562 5850 6024 00000024 180 L R5,OP2LEN Get operand-1 length
+00000566 58A0 6010 00000010 181 L R10,SS2ADDR Calculate OP 2 starting
+0000056A 1BA5 182 SR R10,R5 address
+0000056C 5AA0 6014 00000014 183 A R10,SS2LEN
+00000570 58B0 6024 00000024 184 L R11,OP2LEN
+00000574 0E4A 185 MVCL R4,R10
+
+00000576 0640 187 BCTR R4,0 less one for last char addr
+00000578 D200 4000 6007 00000000 00000007 188 MVC 0(0,R4),SS2LAST set last char
+
+ 190 * Set Substring length and pad byte
+
+0000057E 4300 6004 00000004 192 IC R0,SSLEN Set SS length
+00000582 4310 6005 00000005 193 IC R1,PAD Set SS Pad byte
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 6
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 195 ***********************************************************************
+ 196 * Define come helpful macros to ensure our counts are correct
+ 197 ***********************************************************************
+
+
+
+
+ 199 MACRO
+ 200 OVERONLY &NUM &NUM = number of sets
+ 201 LCLA &CTR
+ 202 &CTR SETA &NUM
+ 203 .LOOP ANOP
+ 204 .*
+ 205 *
+ 206 LM R2,R5,OPSWHERE
+ 207 BC B'0001',*+4
+ 208 .*
+ 209 &CTR SETA &CTR-1
+ 210 AIF (&CTR GT 0).LOOP
+ 211 MEND
+
+
+
+
+
+ 213 MACRO
+ 214 DOINSTR &NUM &NUM = number of sets
+ 215 LCLA &CTR
+ 216 &CTR SETA &NUM
+ 217 .LOOP ANOP
+ 218 .*
+ 219 *
+ 220 LM R2,R5,OPSWHERE
+ 221 CUSE R2,R4
+ 222 BC B'0001',*-4
+ 223 .*
+ 224 &CTR SETA &CTR-1
+ 225 AIF (&CTR GT 0).LOOP
+ 226 MEND
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 7
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 228 ***********************************************************************
+ 229 * Next, time the overhead...
+ 230 ***********************************************************************
+
+00000586 5870 8DB4 00000FB4 232 L R7,NUMLOOPS
+0000058A B205 8DB8 00000FB8 233 STCK BEGCLOCK
+0000058E 9025 8210 00000410 234 STM R2,R5,SAVE2T5
+00000592 05A0 235 BALR R10,0
+ 236 * 100 sets of overhead
+ 237 OVERONLY 2 (first 2)
+ 238+*
+00000594 9825 6018 00000018 239+ LM R2,R5,OPSWHERE
+00000598 4710 839C 0000059C 240+ BC B'0001',*+4
+ 241+*
+0000059C 9825 6018 00000018 242+ LM R2,R5,OPSWHERE
+000005A0 4710 83A4 000005A4 243+ BC B'0001',*+4
+
+ 245 * .........ETC.........
+
+ 247 PRINT OFF
+ 537 PRINT ON
+
+ 539 OVERONLY 2 (last 2)
+ 540+*
+000008A4 9825 6018 00000018 541+ LM R2,R5,OPSWHERE
+000008A8 4710 86AC 000008AC 542+ BC B'0001',*+4
+ 543+*
+000008AC 9825 6018 00000018 544+ LM R2,R5,OPSWHERE
+000008B0 4710 86B4 000008B4 545+ BC B'0001',*+4
+
+000008B4 067A 547 BCTR R7,R10
+000008B6 B205 8DC0 00000FC0 548 STCK ENDCLOCK
+000008BA 45F0 8C30 00000E30 549 BAL R15,CALCDUR
+000008BE D207 8DD0 8DC8 00000FD0 00000FC8 550 MVC OVERHEAD,DURATION
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 8
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 552 ***********************************************************************
+ 553 * Now do the actual timing run...
+ 554 ***********************************************************************
+
+000008C4 5870 8DB4 00000FB4 556 L R7,NUMLOOPS
+000008C8 B205 8DB8 00000FB8 557 STCK BEGCLOCK
+000008CC 05A0 558 BALR R10,0
+ 559 * 100 sets of instructions
+ 560 DOINSTR 2 (first 2)
+ 561+*
+000008CE 9825 6018 00000018 562+ LM R2,R5,OPSWHERE
+000008D2 B257 0024 563+ CUSE R2,R4
+000008D6 4710 86D2 000008D2 564+ BC B'0001',*-4
+ 565+*
+000008DA 9825 6018 00000018 566+ LM R2,R5,OPSWHERE
+000008DE B257 0024 567+ CUSE R2,R4
+000008E2 4710 86DE 000008DE 568+ BC B'0001',*-4
+
+ 570 * .........ETC.........
+
+ 572 PRINT OFF
+ 958 PRINT ON
+
+ 960 DOINSTR 2 (last 2)
+ 961+*
+00000D66 9825 6018 00000018 962+ LM R2,R5,OPSWHERE
+00000D6A B257 0024 963+ CUSE R2,R4
+00000D6E 4710 8B6A 00000D6A 964+ BC B'0001',*-4
+ 965+*
+00000D72 9825 6018 00000018 966+ LM R2,R5,OPSWHERE
+00000D76 B257 0024 967+ CUSE R2,R4
+00000D7A 4710 8B76 00000D76 968+ BC B'0001',*-4
+
+00000D7E 067A 970 BCTR R7,R10
+00000D80 B205 8DC0 00000FC0 971 STCK ENDCLOCK
+
+00000D84 9825 8210 00000410 973 LM R2,R5,SAVE2T5
+00000D88 D204 8E11 8DA8 00001011 00000FA8 974 MVC PRTLINE+33(5),=CL5'CUSE'
+00000D8E 45F0 8BA6 00000DA6 975 BAL R15,RPTSPEED
+ 976 *
+ 977 ** More performance tests?
+ 978 *
+00000D92 5860 8224 00000424 979 L R6,SAVER6 Restore perf table base
+00000D96 4160 603C 0000003C 980 LA R6,CUSENEXT Go on to next table entry
+00000D9A D503 8D9C 6000 00000F9C 00000000 981 CLC =F'0',0(R6) End of table?
+00000DA0 4770 8332 00000532 982 BNE TST91LOP No, loop...
+00000DA4 07FE 983 BR R14 Return to caller or FAILTEST
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 9
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 985 ***********************************************************************
+ 986 * RPTSPEED Report instruction speed
+ 987 ***********************************************************************
+
+00000DA6 50F0 8C10 00000E10 989 RPTSPEED ST R15,RPTSAVE Save return address
+00000DAA 9057 8C14 00000E14 990 STM R5,R7,RPTSVR5T7 Save R5-7
+
+00000DAE 45F0 8C30 00000E30 992 BAL R15,CALCDUR Calculate duration
+
+00000DB2 4150 8DD0 00000FD0 994 LA R5,OVERHEAD Subtract overhead
+00000DB6 4160 8DC8 00000FC8 995 LA R6,DURATION From raw timing
+00000DBA 4170 8DC8 00000FC8 996 LA R7,DURATION Yielding true instruction timing
+00000DBE 45F0 8C84 00000E84 997 BAL R15,SUBDWORD Do it
+
+00000DC2 98AB 8DC8 00000FC8 999 LM R10,R11,DURATION Convert to...
+00000DC6 8CA0 000C 0000000C 1000 SRDL R10,12 ... microseconds
+
+00000DCA 4EA0 8DD8 00000FD8 1002 CVD R10,TICKSAAA Convert HIGH part to decimal
+00000DCE 4EB0 8DE0 00000FE0 1003 CVD R11,TICKSBBB Convert LOW part to decimal
+
+00000DD2 F877 8DE8 8DD8 00000FE8 00000FD8 1005 ZAP TICKSTOT,TICKSAAA Calculate...
+00000DD8 FC75 8DE8 8DAD 00000FE8 00000FAD 1006 MP TICKSTOT,=P'4294967296' ...decimal...
+00000DDE FA77 8DE8 8DE0 00000FE8 00000FE0 1007 AP TICKSTOT,TICKSBBB ...microseconds
+
+00000DE4 D20B 8E1B 8E34 0000101B 00001034 1009 MVC PRTLINE+43(L'EDIT),EDIT (edit into...
+00000DEA DE0B 8E1B 8DEB 0000101B 00000FEB 1010 ED PRTLINE+43(L'EDIT),TICKSTOT+3 ...print line)
+
+
+
+ 1012 *
+ 1013 * Use Hercules Diagnose for Message to console
+ 1014 *
+00000DF0 9002 8C20 00000E20 1015 STM R0,R2,RPTDWSAV Save regs used by MSG
+00000DF4 4100 0044 00000044 1016 LA R0,PRTLNG Message length
+00000DF8 4110 8DF0 00000FF0 1017 LA R1,PRTLINE Message address
+00000DFC 4520 8CB8 00000EB8 1018 BAL R2,MSG Call Hercules console MSG display
+00000E00 9802 8C20 00000E20 1019 LM R0,R2,RPTDWSAV Restore regs
+
+
+00000E04 9857 8C14 00000E14 1021 LM R5,R7,RPTSVR5T7 Restore R5-7
+00000E08 58F0 8C10 00000E10 1022 L R15,RPTSAVE Restore return address
+00000E0C 07FF 1023 BR R15 Return to caller
+
+00000E10 00000000 1025 RPTSAVE DC F'0' R15 save area
+00000E14 00000000 00000000 1026 RPTSVR5T7 DC 3F'0' R5-R7 save area
+
+00000E20 00000000 00000000 1028 RPTDWSAV DC 2D'0' R0-R2 save area for MSG call
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 10
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1030 ***********************************************************************
+ 1031 * CALCDUR Calculate DURATION
+ 1032 ***********************************************************************
+
+00000E30 50F0 8C74 00000E74 1034 CALCDUR ST R15,CALCRET Save return address
+00000E34 9057 8C78 00000E78 1035 STM R5,R7,CALCWORK Save work registers
+
+00000E38 9867 8DB8 00000FB8 1037 LM R6,R7,BEGCLOCK Remove CPU number from clock value
+00000E3C 8C60 0006 00000006 1038 SRDL R6,6 "
+00000E40 8D60 0006 00000006 1039 SLDL R6,6 "
+00000E44 9067 8DB8 00000FB8 1040 STM R6,R7,BEGCLOCK "
+
+00000E48 9867 8DC0 00000FC0 1042 LM R6,R7,ENDCLOCK Remove CPU number from clock value
+00000E4C 8C60 0006 00000006 1043 SRDL R6,6 "
+00000E50 8D60 0006 00000006 1044 SLDL R6,6 "
+00000E54 9067 8DC0 00000FC0 1045 STM R6,R7,ENDCLOCK "
+
+00000E58 4150 8DB8 00000FB8 1047 LA R5,BEGCLOCK Starting time
+00000E5C 4160 8DC0 00000FC0 1048 LA R6,ENDCLOCK Ending time
+00000E60 4170 8DC8 00000FC8 1049 LA R7,DURATION Difference
+00000E64 45F0 8C84 00000E84 1050 BAL R15,SUBDWORD Calculate duration
+
+00000E68 9857 8C78 00000E78 1052 LM R5,R7,CALCWORK Restore work registers
+00000E6C 58F0 8C74 00000E74 1053 L R15,CALCRET Restore return address
+00000E70 07FF 1054 BR R15 Return to caller
+
+00000E74 00000000 1056 CALCRET DC F'0' R15 save area
+00000E78 00000000 00000000 1057 CALCWORK DC 3F'0' R5-R7 save area
+
+
+
+
+ 1059 ***********************************************************************
+ 1060 * SUBDWORD Subtract two doublewords
+ 1061 * R5 --> subtrahend, R6 --> minuend, R7 --> result
+ 1062 ***********************************************************************
+
+00000E84 9014 8CA8 00000EA8 1064 SUBDWORD STM R1,R4,SUBDWSAV Save registers
+
+00000E88 9812 5000 00000000 1066 LM R1,R2,0(R5) Subtrahend (value to subtract)
+00000E8C 9834 6000 00000000 1067 LM R3,R4,0(R6) Minuend (what to subtract FROM)
+00000E90 1F42 1068 SLR R4,R2 Subtract LOW part
+00000E92 47B0 8C9A 00000E9A 1069 BNM *+4+4 (branch if no borrow)
+00000E96 5F30 8DA0 00000FA0 1070 SL R3,=F'1' (otherwise do borrow)
+00000E9A 1F31 1071 SLR R3,R1 Subtract HIGH part
+00000E9C 9034 7000 00000000 1072 STM R3,R4,0(R7) Store results
+
+00000EA0 9814 8CA8 00000EA8 1074 LM R1,R4,SUBDWSAV Restore registers
+00000EA4 07FF 1075 BR R15 Return to caller
+
+00000EA8 00000000 00000000 1077 SUBDWSAV DC 2D'0' R1-R4 save area
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 11
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1079 ***********************************************************************
+ 1080 * Issue HERCULES MESSAGE pointed to by R1, length in R0
+ 1081 * R2 = return address
+ 1082 ***********************************************************************
+
+00000EB8 4900 8DA4 00000FA4 1084 MSG CH R0,=H'0' Do we even HAVE a message?
+00000EBC 07D2 1085 BNHR R2 No, ignore
+
+00000EBE 9002 8CF0 00000EF0 1087 STM R0,R2,MSGSAVE Save registers
+
+00000EC2 4900 8DA6 00000FA6 1089 CH R0,=AL2(L'MSGMSG) Message length within limits?
+00000EC6 47D0 8CCE 00000ECE 1090 BNH MSGOK Yes, continue
+00000ECA 4100 005F 0000005F 1091 LA R0,L'MSGMSG No, set to maximum
+
+00000ECE 1820 1093 MSGOK LR R2,R0 Copy length to work register
+00000ED0 0620 1094 BCTR R2,0 Minus-1 for execute
+00000ED2 4420 8CFC 00000EFC 1095 EX R2,MSGMVC Copy message to O/P buffer
+
+00000ED6 4120 200A 0000000A 1097 LA R2,1+L'MSGCMD(,R2) Calculate true command length
+00000EDA 4110 8D02 00000F02 1098 LA R1,MSGCMD Point to true command
+
+00000EDE 83120008 1100 DC X'83',X'12',X'0008' Issue Hercules Diagnose X'008'
+00000EE2 4780 8CE8 00000EE8 1101 BZ MSGRET Return if successful
+00000EE6 0000 1102 DC H'0' CRASH for debugging purposes
+
+00000EE8 9802 8CF0 00000EF0 1104 MSGRET LM R0,R2,MSGSAVE Restore registers
+00000EEC 07F2 1105 BR R2 Return to caller
+
+
+
+
+
+
+00000EF0 00000000 00000000 1107 MSGSAVE DC 3F'0' Registers save area
+00000EFC D200 8D0B 1000 00000F0B 00000000 1108 MSGMVC MVC MSGMSG(0),0(R1) Executed instruction
+
+
+00000F02 D4E2C7D5 D6C8405C 1110 MSGCMD DC C'MSGNOH * ' *** HERCULES MESSAGE COMMAND ***
+00000F0B 40404040 40404040 1111 MSGMSG DC CL95' ' The message text to be displayed
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 12
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1113 ***********************************************************************
+ 1114 * Normal completion or Abnormal termination PSWs
+ 1115 ***********************************************************************
+
+
+00000F70 00020001 80000000 1117 EOJPSW DC 0D'0',X'0002000180000000',AD(0)
+
+00000F80 B2B2 8D70 00000F70 1119 EOJ LPSWE EOJPSW Normal completion
+
+
+
+00000F88 00020001 80000000 1121 FAILPSW DC 0D'0',X'0002000180000000',AD(X'BAD')
+
+00000F98 B2B2 8D88 00000F88 1123 FAILTEST LPSWE FAILPSW Abnormal termination
+
+
+
+
+ 1125 ***********************************************************************
+ 1126 * Working Storage
+ 1127 ***********************************************************************
+
+00000F9C 1129 LTORG , Literals pool
+00000F9C 00000000 1130 =F'0'
+00000FA0 00000001 1131 =F'1'
+00000FA4 0000 1132 =H'0'
+00000FA6 005F 1133 =AL2(L'MSGMSG)
+00000FA8 C3E4E2C5 40 1134 =CL5'CUSE'
+00000FAD 04294967 296C 1135 =P'4294967296'
+
+
+ 00000400 00000001 1137 K EQU 1024 One KB
+ 00001000 00000001 1138 PAGE EQU (4*K) Size of one page
+ 00008000 00000001 1139 K32 EQU (32*K) 32 KB
+ 00010000 00000001 1140 K64 EQU (64*K) 64 KB
+ 00100000 00000001 1141 MB EQU (K*K) 1 MB
+
+00000FB4 00002710 1143 NUMLOOPS DC F'10000' 10,000 * 100 = 1,000,000
+
+00000FB8 BBBBBBBB BBBBBBBB 1145 BEGCLOCK DC 0D'0',8X'BB' Begin
+00000FC0 EEEEEEEE EEEEEEEE 1146 ENDCLOCK DC 0D'0',8X'EE' End
+00000FC8 DDDDDDDD DDDDDDDD 1147 DURATION DC 0D'0',8X'DD' Diff
+00000FD0 FFFFFFFF FFFFFFFF 1148 OVERHEAD DC 0D'0',8X'FF' Overhead
+
+00000FD8 00000000 0000000C 1150 TICKSAAA DC PL8'0' Clock ticks high part
+00000FE0 00000000 0000000C 1151 TICKSBBB DC PL8'0' Clock ticks low part
+00000FE8 00000000 0000000C 1152 TICKSTOT DC PL8'0' Total clock ticks
+
+00000FF0 40404040 40404040 1154 PRTLINE DC C' 1,000,000 iterations of XXXXX'
+00001016 40A39696 9240F9F9 1155 DC C' took 999,999,999 microseconds'
+ 00000044 00000001 1156 PRTLNG EQU *-PRTLINE
+00001034 40202020 6B202020 1157 EDIT DC X'402020206B2020206B202120'
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 13
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1159 ***********************************************************************
+ 1160 * CUSETEST DSECT
+ 1161 ***********************************************************************
+
+
+ 1163 CUSETEST DSECT ,
+00000000 00 1164 TNUM DC X'00' CUSE table number
+00000001 000000 1165 DC XL3'00'
+
+
+00000004 00 1167 SSLEN DC AL1(0) CUSE - SS length
+00000005 00 1168 PAD DC X'00' CUSE - Pad byte
+00000006 00 1169 SS1LAST DC X'00' First-Operand SS last byte
+00000007 00 1170 SS2LAST DC X'00' Second-Operand SS last byte
+
+
+00000008 00000000 1172 SS1ADDR DC A(0) First-Operand SS Address
+0000000C 00000000 1173 SS1LEN DC A(0) First-Operand SS length
+00000010 00000000 1174 SS2ADDR DC A(0) Second-Operand SS Address
+00000014 00000000 1175 SS2LEN DC A(0) Second-Operand SS length
+
+
+ 00000018 00000001 1177 OPSWHERE EQU *
+00000018 00000000 1178 OP1WHERE DC A(0) Where Operand-1 data should be placed
+0000001C 00000000 1179 OP1LEN DC F'0' CUSE - First-Operand Length
+00000020 00000000 1180 OP2WHERE DC A(0) Where Operand-2 data should be placed
+00000024 00000000 1181 OP2LEN DC F'0' CUSE - Second-Operand Length
+ 1182
+
+
+00000028 00000000 1184 FAILMASK DC A(0) Failure Branch on Condition mask
+
+
+ 1186 * Ending register values
+0000002C 00000000 1187 ENDOP1 DC A(0) Operand 1 address
+00000030 00000000 1188 DC A(0) Operand 1 length
+00000034 00000000 1189 ENDOP2 DC A(0) Operand 2 address
+00000038 00000000 1190 DC A(0) Operand 2 length
+
+
+ 0000003C 00000001 1192 CUSENEXT EQU * Start of next table entry...
+
+
+
+
+
+
+ AABBCCDD 00000001 1194 REG2PATT EQU X'AABBCCDD' Polluted Register pattern
+ 000000DD 00000001 1195 REG2LOW EQU X'DD' (last byte above)
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 14
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1197 ***********************************************************************
+ 1198 * CUSE Performace Test data...
+ 1199 ***********************************************************************
+
+ 00000000 0000E9AF 1201 CUSE2TST CSECT ,
+00001040 1202 CUSEPERF DC 0A(0) Start of table
+
+
+ 1204 ***********************************************************************
+ 1205 * performance test data
+ 1206 ***********************************************************************
+
+ 1208 * Cross page bounday - operand-1 and operand-2
+
+00001040 1210 PTE6 DS 0F
+00001040 E6 1211 DC X'E6' Test Num
+00001041 000000 1212 DC XL3'00'
+ 1213 *
+00001044 01 1214 DC AL1(1) SS Length
+00001045 00 1215 DC X'00' Pad Byte
+00001046 77 1216 DC X'77' First-Operand SS last byte
+00001047 77 1217 DC X'77' Second-Operand SS last byte
+ 1218 * Source
+00001048 000031B0 00000020 1219 DC A(COP1A),A(032) Op-1 SS & length
+00001050 00009DB0 00000020 1220 DC A(COP2A),A(032) OP-2 SS & length
+ 1221 * Target
+00001058 00B2FFA0 00000200 1222 DC A(11*MB+(6*K32)-96),A(512) Op-1 & length
+00001060 00C2FF80 00000200 1223 DC A(12*MB+(6*K32)-128),A(512) Op-2 & length
+ 1224 *
+00001068 00000006 1225 DC A(6) not CC0 or CC3 Fail mask
+ 1226 * Ending register values
+0000106C 00B30180 00000020 1227 DC A(11*MB+(6*K32)+(512-32)-96),A(032) OP-1
+00001074 00C30160 00000020 1228 DC A(12*MB+(6*K32)+(512-32)-128),A(032) OP-2
+
+
+0000107C 1230 PTE1 DS 0F
+0000107C E1 1231 DC X'E1' Test Num
+0000107D 000000 1232 DC XL3'00'
+ 1233 *
+00001080 04 1234 DC AL1(4) SS Length
+00001081 00 1235 DC X'00' Pad Byte
+00001082 EE 1236 DC X'EE' First-Operand SS last byte
+00001083 EE 1237 DC X'EE' Second-Operand SS last byte
+ 1238 * Source
+00001084 000031B0 00000004 1239 DC A(COP1A),A(004) Op-1 SS & length
+0000108C 00009DB0 00000004 1240 DC A(COP2A),A(004) OP-2 SS & length
+ 1241 * Target
+00001094 00B07FC1 00000200 1242 DC A(11*MB+(1*K32)-63),A(512) Op-1 & length
+0000109C 00C07FC8 00000200 1243 DC A(12*MB+(1*K32)-56),A(512) Op-2 & length
+ 1244 *
+000010A4 00000007 1245 DC A(7) CC0 Fail mask
+ 1246 * Ending register values
+000010A8 00B081BD 00000004 1247 DC A(11*MB+(1*K32)-63+(512-4)),A(004) OP-1
+000010B0 00C081C4 00000004 1248 DC A(12*MB+(1*K32)-56+(512-4)),A(004) OP-2
+
+000010B8 1250 PTE2 DS 0F
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 15
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+000010B8 E2 1251 DC X'E2' Test Num
+000010B9 000000 1252 DC XL3'00'
+ 1253 *
+000010BC 08 1254 DC AL1(8) SS Length
+000010BD 00 1255 DC X'00' Pad Byte
+000010BE 77 1256 DC X'77' First-Operand SS last byte
+000010BF 77 1257 DC X'77' Second-Operand SS last byte
+ 1258 * Source
+000010C0 000031B0 00000008 1259 DC A(COP1A),A(008) Op-1 SS & length
+000010C8 00009DB0 00000008 1260 DC A(COP2A),A(008) OP-2 SS & length
+ 1261 * Target
+000010D0 00B0FFA0 00000200 1262 DC A(11*MB+(2*K32)-96),A(512) Op-1 & length
+000010D8 00C0FF80 00000200 1263 DC A(12*MB+(2*K32)-128),A(512) Op-2 & length
+ 1264 *
+000010E0 00000007 1265 DC A(7) CC0 Fail mask
+ 1266 * Ending register values
+000010E4 00B10198 00000008 1267 DC A(11*MB+(2*K32)+(512-8)-96),A(008) OP-1
+000010EC 00C10178 00000008 1268 DC A(12*MB+(2*K32)+(512-8)-128),A(008) OP-2
+
+
+000010F4 1270 PTF2 DS 0F
+000010F4 F2 1271 DC X'F2' Test Num
+000010F5 000000 1272 DC XL3'00'
+ 1273 *
+000010F8 20 1274 DC AL1(32) SS Length
+000010F9 00 1275 DC X'00' Pad Byte
+000010FA 77 1276 DC X'77' First-Operand SS last byte
+000010FB 77 1277 DC X'77' Second-Operand SS last byte
+ 1278 * Source
+000010FC 000031B0 00000020 1279 DC A(COP1A),A(032) Op-1 SS & length
+00001104 00009DB0 00000020 1280 DC A(COP2A),A(032) OP-2 SS & length
+ 1281 * Target
+0000110C 00D0FFA0 00000200 1282 DC A(13*MB+(2*K32)-96),A(512) Op-1 & length
+00001114 00E0FF80 00000200 1283 DC A(14*MB+(2*K32)-128),A(512) Op-2 & length
+ 1284 *
+0000111C 00000007 1285 DC A(7) CC0 Fail mask
+ 1286 * Ending register values
+00001120 00D10180 00000020 1287 DC A(13*MB+(2*K32)+(512-32)-96),A(032) OP-1
+00001128 00E10160 00000020 1288 DC A(14*MB+(2*K32)+(512-32)-128),A(032) OP-2
+
+
+00001130 1290 PTE7 DS 0F
+00001130 E7 1291 DC X'E7' Test Num
+00001131 000000 1292 DC XL3'00'
+ 1293 *
+00001134 04 1294 DC AL1(4) SS Length
+00001135 00 1295 DC X'00' Pad Byte
+00001136 77 1296 DC X'77' First-Operand SS last byte
+00001137 77 1297 DC X'77' Second-Operand SS last byte
+ 1298 * Source
+00001138 000079B0 00000020 1299 DC A(COP1C),A(032) Op-1 SS & length
+00001140 0000E5B0 00000020 1300 DC A(COP2C),A(032) OP-2 SS & length
+ 1301 * Target
+00001148 00B37FA0 00000200 1302 DC A(11*MB+(7*K32)-96),A(512) Op-1 & length
+00001150 00C37F80 00000200 1303 DC A(12*MB+(7*K32)-128),A(512) Op-2 & length
+ 1304 *
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 16
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+00001158 00000006 1305 DC A(6) not CC0 or CC3 Fail mask
+ 1306 * Ending register values
+0000115C 00B3817D 00000023 1307 DC A(11*MB+(7*K32)+(512-32)-96-3),A(032+3) OP-1
+00001164 00C3815D 00000023 1308 DC A(12*MB+(7*K32)+(512-32)-128-3),A(032+3) OP-2
+
+
+0000116C 1310 PTF4 DS 0F
+0000116C F4 1311 DC X'F4' Test Num
+0000116D 000000 1312 DC XL3'00'
+ 1313 *
+00001170 20 1314 DC AL1(32) SS Length
+00001171 00 1315 DC X'00' Pad Byte
+00001172 77 1316 DC X'77' First-Operand SS last byte
+00001173 77 1317 DC X'77' Second-Operand SS last byte
+ 1318 * Source
+00001174 000031B0 00000020 1319 DC A(COP1A),A(032) Op-1 SS & length
+0000117C 00009DB0 00000020 1320 DC A(COP2A),A(032) OP-2 SS & length
+ 1321 * Target
+00001184 00D1FFA0 00000F80 1322 DC A(13*MB+(4*K32)-96),A(4096-128) Op-1 & length
+0000118C 00E1FF80 00000F80 1323 DC A(14*MB+(4*K32)-128),A(4096-128) Op-2 & length
+ 1324 *
+00001194 00000006 1325 DC A(6) not CC0 or CC3 Fail mask
+ 1326 * Ending register values
+00001198 00D20F00 00000020 1327 DC A(13*MB+(4*K32)+(4096-128-32)-96),A(032) OP-1
+000011A0 00E20EE0 00000020 1328 DC A(14*MB+(4*K32)+(4096-128-32)-128),A(032) OP-2
+
+
+
+000011A8 00000000 1330 DC A(0) end of table
+000011AC 00000000 1331 DC A(0) end of table
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 17
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 1333 ***********************************************************************
+ 1334 * CUSE Operand-1 scan data...
+ 1335 ***********************************************************************
+
+000011B0 1337 DS 0F
+000011B0 98765432 98765432 1338 DC 2048XL4'98765432'
+000031B0 111111F0 111111F0 1339 COP1A DC 256XL4'111111F0'
+
+000035B0 1341 DS 0F
+000035B0 98765432 98765432 1342 DC 2048XL4'98765432'
+000055B0 40404040 40404040 1343 COP1B DC 256XL4'40404040'
+
+000059B0 1345 DS 0F
+000059B0 11223344 11223344 1346 DC 2048XL4'11223344'
+000079B0 40404040 40404040 1347 COP1C DC 256XL4'40404040'
+
+
+
+
+ 1349 ***********************************************************************
+ 1350 * CUSE Operand-2 scan data
+ 1351 ***********************************************************************
+
+00007DB0 1353 DS 0F
+00007DB0 89ABCDEF 89ABCDEF 1354 DC 2048XL4'89ABCDEF'
+00009DB0 111111F0 111111F0 1355 COP2A DC 256XL4'111111F0'
+
+0000A1B0 1357 DS 0F
+0000A1B0 89ABCDEF 89ABCDEF 1358 DC 2048XL4'89ABCDEF'
+0000C1B0 40404040 40404040 1359 COP2B DC 256XL4'40404040'
+
+0000C5B0 1361 DS 0F
+0000C5B0 FF223344 FF223344 1362 DC 2048XL4'FF223344'
+0000E5B0 40404040 40404040 1363 COP2C DC 256XL4'40404040'
+
+
+
+
+ 1365 ***********************************************************************
+ 1366 * Register equates
+ 1367 ***********************************************************************
+
+
+ 00000000 00000001 1369 R0 EQU 0
+ 00000001 00000001 1370 R1 EQU 1
+ 00000002 00000001 1371 R2 EQU 2
+ 00000003 00000001 1372 R3 EQU 3
+ 00000004 00000001 1373 R4 EQU 4
+ 00000005 00000001 1374 R5 EQU 5
+ 00000006 00000001 1375 R6 EQU 6
+ 00000007 00000001 1376 R7 EQU 7
+ 00000008 00000001 1377 R8 EQU 8
+ 00000009 00000001 1378 R9 EQU 9
+ 0000000A 00000001 1379 R10 EQU 10
+ 0000000B 00000001 1380 R11 EQU 11
+ 0000000C 00000001 1381 R12 EQU 12
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 18
+
+ LOC OBJECT CODE ADDR1 ADDR2 STMT
+
+ 0000000D 00000001 1382 R13 EQU 13
+ 0000000E 00000001 1383 R14 EQU 14
+ 0000000F 00000001 1384 R15 EQU 15
+
+
+ 1386 END
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 19
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+BEGCLOCK D 00000FB8 8 1145 233 557 1037 1040 1047
+BEGIN I 00000200 2 98 65 95 96
+CALCDUR I 00000E30 4 1034 549 992
+CALCRET F 00000E74 4 1056 1034 1053
+CALCWORK F 00000E78 4 1057 1035 1052
+COP1A X 000031B0 4 1339 1219 1239 1259 1279 1319
+COP1B X 000055B0 4 1343
+COP1C X 000079B0 4 1347 1299
+COP2A X 00009DB0 4 1355 1220 1240 1260 1280 1320
+COP2B X 0000C1B0 4 1359
+COP2C X 0000E5B0 4 1363 1300
+CUSE2TST J 00000000 59824 60 63 67 71 130 61
+CUSENEXT U 0000003C 1 1192 980
+CUSEPERF A 00001040 4 1202 153
+CUSETEST 4 00000000 60 1163 154
+DURATION D 00000FC8 8 1147 550 995 996 999 1049
+EDIT X 00001034 12 1157 1009 1010
+ENDCLOCK D 00000FC0 8 1146 548 971 1042 1045 1048
+ENDOP1 A 0000002C 4 1187
+ENDOP2 A 00000034 4 1189
+EOJ I 00000F80 4 1119 116 124
+EOJPSW D 00000F70 8 1117 1119
+FAILMASK A 00000028 4 1184
+FAILPSW D 00000F88 8 1121 1123
+FAILTEST I 00000F98 4 1123 119 122
+IMAGE 1 00000000 59824 0
+K U 00000400 1 1137 1138 1139 1140 1141
+K32 U 00008000 1 1139 1222 1223 1227 1228 1242 1243 1247 1248 1262 1263 1267 1268 1282
+ 1283 1287 1288 1302 1303 1307 1308 1322 1323 1327 1328
+K64 U 00010000 1 1140
+MB U 00100000 1 1141 1222 1223 1227 1228 1242 1243 1247 1248 1262 1263 1267 1268 1282
+ 1283 1287 1288 1302 1303 1307 1308 1322 1323 1327 1328
+MSG I 00000EB8 4 1084 1018
+MSGCMD C 00000F02 9 1110 1097 1098
+MSGMSG C 00000F0B 95 1111 1091 1108 1089
+MSGMVC I 00000EFC 6 1108 1095
+MSGOK I 00000ECE 2 1093 1090
+MSGRET I 00000EE8 4 1104 1101
+MSGSAVE F 00000EF0 4 1107 1087 1104
+NUMLOOPS F 00000FB4 4 1143 232 556
+OP1LEN F 0000001C 4 1179 167 171
+OP1WHERE A 00000018 4 1178 166
+OP2LEN F 00000024 4 1181 180 184
+OP2WHERE A 00000020 4 1180 179
+OPSWHERE U 00000018 1 1177 239 242 250 253 256 259 262 265 268 271 274 277 280
+ 283 286 289 292 295 298 301 304 307 310 313 316 319
+ 322 325 328 331 334 337 340 343 346 349 352 355 358
+ 361 364 367 370 373 376 379 382 385 388 391 394 397
+ 400 403 406 409 412 415 418 421 424 427 430 433 436
+ 439 442 445 448 451 454 457 460 463 466 469 472 475
+ 478 481 484 487 490 493 496 499 502 505 508 511 514
+ 517 520 523 526 529 532 535 541 544 562 566 575 579
+ 583 587 591 595 599 603 607 611 615 619 623 627 631
+ 635 639 643 647 651 655 659 663 667 671 675 679 683
+ 687 691 695 699 703 707 711 715 719 723 727 731 735
+ 739 743 747 751 755 759 763 767 771 775 779 783 787
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 20
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+ 791 795 799 803 807 811 815 819 823 827 831 835 839
+ 843 847 851 855 859 863 867 871 875 879 883 887 891
+ 895 899 903 907 911 915 919 923 927 931 935 939 943
+ 947 951 955 962 966
+OVERHEAD D 00000FD0 8 1148 550 994
+PAD X 00000005 1 1168 193
+PAGE U 00001000 1 1138
+PRTLINE C 00000FF0 38 1154 1156 974 1009 1010 1017
+PRTLNG U 00000044 1 1156 1016
+PTE1 F 0000107C 4 1230
+PTE2 F 000010B8 4 1250
+PTE6 F 00001040 4 1210
+PTE7 F 00001130 4 1290
+PTF2 F 000010F4 4 1270
+PTF4 F 0000116C 4 1310
+R0 U 00000000 1 1369 61 192 1015 1016 1019 1084 1087 1089 1091 1093 1104
+R1 U 00000001 1 1370 193 1017 1064 1066 1071 1074 1098 1108
+R10 U 0000000A 1 1379 168 169 170 172 181 182 183 185 235 547 558 970 999
+ 1000 1002
+R11 U 0000000B 1 1380 171 184 999 1003
+R12 U 0000000C 1 1381
+R13 U 0000000D 1 1382
+R14 U 0000000E 1 1383 109 151 983
+R15 U 0000000F 1 1384 549 975 989 992 997 1022 1023 1034 1050 1053 1054 1075
+R2 U 00000002 1 1371 166 172 174 175 234 239 242 250 253 256 259 262 265
+ 268 271 274 277 280 283 286 289 292 295 298 301 304
+ 307 310 313 316 319 322 325 328 331 334 337 340 343
+ 346 349 352 355 358 361 364 367 370 373 376 379 382
+ 385 388 391 394 397 400 403 406 409 412 415 418 421
+ 424 427 430 433 436 439 442 445 448 451 454 457 460
+ 463 466 469 472 475 478 481 484 487 490 493 496 499
+ 502 505 508 511 514 517 520 523 526 529 532 535 541
+ 544 562 563 566 567 575 576 579 580 583 584 587 588
+ 591 592 595 596 599 600 603 604 607 608 611 612 615
+ 616 619 620 623 624 627 628 631 632 635 636 639 640
+ 643 644 647 648 651 652 655 656 659 660 663 664 667
+ 668 671 672 675 676 679 680 683 684 687 688 691 692
+ 695 696 699 700 703 704 707 708 711 712 715 716 719
+ 720 723 724 727 728 731 732 735 736 739 740 743 744
+ 747 748 751 752 755 756 759 760 763 764 767 768 771
+ 772 775 776 779 780 783 784 787 788 791 792 795 796
+ 799 800 803 804 807 808 811 812 815 816 819 820 823
+ 824 827 828 831 832 835 836 839 840 843 844 847 848
+ 851 852 855 856 859 860 863 864 867 868 871 872 875
+ 876 879 880 883 884 887 888 891 892 895 896 899 900
+ 903 904 907 908 911 912 915 916 919 920 923 924 927
+ 928 931 932 935 936 939 940 943 944 947 948 951 952
+ 955 956 962 963 966 967 973 1015 1018 1019 1066 1068 1085
+ 1087 1093 1094 1095 1097 1104 1105
+R3 U 00000003 1 1372 167 169 1067 1070 1071 1072
+R4 U 00000004 1 1373 179 185 187 188 563 567 576 580 584 588 592 596 600
+ 604 608 612 616 620 624 628 632 636 640 644 648 652
+ 656 660 664 668 672 676 680 684 688 692 696 700 704
+ 708 712 716 720 724 728 732 736 740 744 748 752 756
+ 760 764 768 772 776 780 784 788 792 796 800 804 808
+ 812 816 820 824 828 832 836 840 844 848 852 856 860
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 21
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+ 864 868 872 876 880 884 888 892 896 900 904 908 912
+ 916 920 924 928 932 936 940 944 948 952 956 963 967
+ 1064 1067 1068 1072 1074
+R5 U 00000005 1 1374 180 182 234 239 242 250 253 256 259 262 265 268 271
+ 274 277 280 283 286 289 292 295 298 301 304 307 310
+ 313 316 319 322 325 328 331 334 337 340 343 346 349
+ 352 355 358 361 364 367 370 373 376 379 382 385 388
+ 391 394 397 400 403 406 409 412 415 418 421 424 427
+ 430 433 436 439 442 445 448 451 454 457 460 463 466
+ 469 472 475 478 481 484 487 490 493 496 499 502 505
+ 508 511 514 517 520 523 526 529 532 535 541 544 562
+ 566 575 579 583 587 591 595 599 603 607 611 615 619
+ 623 627 631 635 639 643 647 651 655 659 663 667 671
+ 675 679 683 687 691 695 699 703 707 711 715 719 723
+ 727 731 735 739 743 747 751 755 759 763 767 771 775
+ 779 783 787 791 795 799 803 807 811 815 819 823 827
+ 831 835 839 843 847 851 855 859 863 867 871 875 879
+ 883 887 891 895 899 903 907 911 915 919 923 927 931
+ 935 939 943 947 951 955 962 966 973 990 994 1021 1035
+ 1047 1052 1066
+R6 U 00000006 1 1375 153 154 157 979 980 981 995 1037 1038 1039 1040 1042 1043
+ 1044 1045 1048 1067
+R7 U 00000007 1 1376 159 160 232 547 556 970 990 996 1021 1035 1037 1040 1042
+ 1045 1049 1052 1072
+R8 U 00000008 1 1377 95 98 99 100 102
+R9 U 00000009 1 1378 96 102 103
+REG2LOW U 000000DD 1 1195
+REG2PATT U AABBCCDD 1 1194
+RPTDWSAV D 00000E20 8 1028 1015 1019
+RPTSAVE F 00000E10 4 1025 989 1022
+RPTSPEED I 00000DA6 4 989 975
+RPTSVR5T7 F 00000E14 4 1026 990 1021
+SAVE2T5 F 00000410 4 140 234 973
+SAVER2 F 00000420 4 141
+SAVER6 F 00000424 4 142 157 979
+SS1ADDR A 00000008 4 1172 168
+SS1LAST X 00000006 1 1169 175
+SS1LEN A 0000000C 4 1173 170
+SS2ADDR A 00000010 4 1174 181
+SS2LAST X 00000007 1 1170 188
+SS2LEN A 00000014 4 1175 183
+SSLEN R 00000004 1 1167 192
+SUBDWORD I 00000E84 4 1064 997 1050
+SUBDWSAV D 00000EA8 8 1077 1064 1074
+SUBTEST X 00000401 1 134 121
+TEST91 I 00000528 4 150 109
+TESTADDR D 00000400 8 132
+TESTNUM X 00000400 1 133 118 160
+TICKSAAA P 00000FD8 8 1150 1002 1005
+TICKSBBB P 00000FE0 8 1151 1003 1007
+TICKSTOT P 00000FE8 8 1152 1005 1006 1007 1010
+TIMEOPT X 00000408 1 137 115 150
+TNUM X 00000000 1 1164 159
+TST91LOP U 00000532 1 156 982
+=AL2(L'MSGMSG) R 00000FA6 2 1133 1089
+=CL5'CUSE' C 00000FA8 5 1134 974
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 22
+
+ SYMBOL TYPE VALUE LENGTH DEFN REFERENCES
+
+=F'0' F 00000F9C 4 1130 981
+=F'1' F 00000FA0 4 1131 1070
+=H'0' H 00000FA4 2 1132 1084
+=P'4294967296' P 00000FAD 6 1135 1006
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 23
+
+ MACRO DEFN REFERENCES
+
+DOINSTR 214 560 573 960
+OVERONLY 200 237 248 539
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 24
+
+ DESC SYMBOL SIZE POS ADDR
+
+Entry: 0
+
+Image IMAGE 59824 0000-E9AF 0000-E9AF
+ Region 59824 0000-E9AF 0000-E9AF
+ CSECT CUSE2TST 59824 0000-E9AF 0000-E9AF
+ASMA Ver. 0.2.1 CUSE-02-performance (Test CUSE instructions) 09 Nov 2022 16:02:40 Page 25
+
+ STMT FILE NAME
+
+1 /devstor/dev/tests/CUSE-02-performance.asm
+
+
+** NO ERRORS FOUND **
+
+
\ No newline at end of file
diff --git a/tests/CUSE-02-performance.pdf b/tests/CUSE-02-performance.pdf
new file mode 100644
index 000000000..28d93c61f
Binary files /dev/null and b/tests/CUSE-02-performance.pdf differ
diff --git a/tests/CUSE-02-performance.tst b/tests/CUSE-02-performance.tst
new file mode 100644
index 000000000..21a7966e6
--- /dev/null
+++ b/tests/CUSE-02-performance.tst
@@ -0,0 +1,46 @@
+*Testcase CUSE-02-performance (Test CUSE instruction)
+
+# ------------------------------------------------------------------------------
+# This ONLY tests the performance of the CUSE instruction.
+#
+# The default is to NOT run performance tests. To enable this performance
+# test, uncomment the "#r 408=ff # (enable timing tests)" line below.
+#
+# Tests:
+# Both opernand-1 and operand-2 cross a page boundary.
+#
+# 1. CUSE of 512 bytes - substring length 1
+# 2. CUSE of 512 bytes - substring length 4
+# 3. CUSE of 512 bytes - substring length 8
+# 4. CUSE of 512 bytes - substring length 32
+# 5. CUSE of 512 bytes - substring length 32 (different strings)
+# 6. CUSE of 4160 (4096+64) bytes - substring length 32
+# which results in a CC=3, and a branch back
+# to complete the CUSE instruction.
+#
+# Output:
+#
+# For each test, a console line will the generated with timing
+# results, as follows:
+#
+# 1,000,000 iterations of CUSE took 406,437 microseconds
+# 1,000,000 iterations of CUSE took 2,496,775 microseconds
+# 1,000,000 iterations of CUSE took 1,205,304 microseconds
+# 1,000,000 iterations of CUSE took 340,440 microseconds
+# 1,000,000 iterations of CUSE took 2,210,040 microseconds
+# 1,000,000 iterations of CUSE took 2,313,153 microseconds
+# ------------------------------------------------------------------------------
+
+mainsize 16
+numcpu 1
+sysclear
+archlvl z/Arch
+
+loadcore "$(testpath)/CUSE-02-performance.core" 0x0
+
+diag8cmd enable # (needed for messages to Hercules console)
+#r 408=ff # (enable timing tests)
+runtest 300 # (test duration, depends on host)
+diag8cmd disable # (reset back to default)
+
+*Done
diff --git a/tests/Makefile.am b/tests/Makefile.am
index bf120aac0..a0986bff3 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -214,6 +214,16 @@ EXTRA_DIST = \
csxtr.assemble \
csxtr.listing \
csxtr.tst \
+ CUSE-01-basic.asm \
+ CUSE-01-basic.core \
+ CUSE-01-basic.list \
+ CUSE-01-basic.pdf \
+ CUSE-01-basic.tst \
+ CUSE-02-performance.asm \
+ CUSE-02-performance.core \
+ CUSE-02-performance.list \
+ CUSE-02-performance.pdf \
+ CUSE-02-performance.tst \
cxgbr.txt \
cxgtr.txt \
dc-float.asm \