|
|
1.1 ! root 1: ! 2: /* constants definition for mzeroextended instruction */ ! 3: /* */ ! 4: /* */ ! 5: ! 6: #define MOVZBW 0xb9 /*opcodes */ ! 7: #define MOVZBL 0xa9 ! 8: #define MOVZWL 0xc3 ! 9: ! 10: extern long scoplp; ! 11: extern long force_lp; ! 12: ! 13: asm(".set PSWMASK,0xf"); ! 14: ! 15: #define MAX_PATTERNS 2 ! 16: ! 17: #define IDESTB1 0xaaaaaa00 /*destination */ ! 18: /*initial values */ ! 19: #define IDESTB2 0xaaaaaaaa ! 20: #define IDESTW1 0xffff0000 ! 21: #define IDESTW2 -1 ! 22: ! 23: #define SB1 0xaaaaaaff /*source values */ ! 24: #define SB2 0xaaaaaa00 ! 25: #define SW1 -1 ! 26: #define SW2 0xffff0000 ! 27: ! 28: #define EDESTBW1 0xaaaa00ff /*expected destination */ ! 29: #define EDESTBW2 0xaaaa0000 ! 30: ! 31: #define EDESTBL1 0x000000ff ! 32: #define EDESTBL2 0 ! 33: ! 34: #define EDESTWL1 0x0000ffff ! 35: #define EDESTWL2 0 ! 36: ! 37: #define FLG1 14 /*initial flags */ ! 38: #define FLG2 1 ! 39: ! 40: #define EFLG1 1 /*expected flags */ ! 41: #define EFLG2 5 ! 42: ! 43: #define ERROR1 1 /*error definitions */ ! 44: #define ERROR2 2 ! 45: #define ERROR3 3 ! 46: #define ERROR4 4 ! 47: #define ERROR5 5 ! 48: /*error messages */ ! 49: ! 50: /* standard definition file */ ! 51: /* for 'C' diagnostic porgrams. */ ! 52: /* */ ! 53: /* */ ! 54: #define HIGH 31 ! 55: #define IPL 18 ! 56: #define PSWMASK 255 ! 57: #define FLAGS 0x0000000f ! 58: ! 59: ! 60: ! 61: ! 62: ! 63: /* Global variables for movz test */ ! 64: /* */ ! 65: /* */ ! 66: ! 67: static long index = 0; ! 68: static long dest = 0; /*destination location */ ! 69: static long source = 0; /*source location */ ! 70: static long psw; /*processor status word */ ! 71: ! 72: static long flag_value[MAX_PATTERNS] = {FLG1,FLG2}; ! 73: /*flag values for initialization */ ! 74: ! 75: static long error_count = 0; ! 76: ! 77: ! 78: static long expbw[MAX_PATTERNS] = {EDESTBW1,EDESTBW2}; ! 79: /*expected values */ ! 80: ! 81: static long expbl[MAX_PATTERNS] = {EDESTBL1,EDESTBL2}; ! 82: static long expwl[MAX_PATTERNS] = {EDESTWL1,EDESTWL2}; ! 83: ! 84: ! 85: static long exp_psw[MAX_PATTERNS] = {EFLG1,EFLG2}; ! 86: /*expected psw */ ! 87: ! 88: static long sourceb[MAX_PATTERNS] = {SB1,SB2}; ! 89: /*source values */ ! 90: ! 91: static long sourcew[MAX_PATTERNS] = {SW1,SW2}; ! 92: ! 93: static long destb[MAX_PATTERNS] = {IDESTB1,IDESTB2}; ! 94: static long destw[MAX_PATTERNS] = {IDESTW1,IDESTW2}; ! 95: ! 96: ! 97: static char *title; ! 98: movz() ! 99: { ! 100: asm("movl $2,_no_opr"); ! 101: title = "** MOVZ_WL **\n"; ! 102: movzwl(); ! 103: title = "** MOVZ_BW **\n"; ! 104: movzbw(); ! 105: title = "** MOVZ_BL **\n"; ! 106: movzbl(); ! 107: asm("jmp *return"); ! 108: } ! 109: ! 110: ! 111: static movzwl() /* move zero extended word to long test */ ! 112: { ! 113: asm("bicpsw $PSWMASK"); /*psw = 0*/ ! 114: for(index=0; index<MAX_PATTERNS; index++) ! 115: { ! 116: t_movzwl(); ! 117: t_movzwl1(); /* Special case : dest. addr = src addr */ ! 118: } ! 119: } ! 120: ! 121: static t_movzwl() /*single test called by main test*/ ! 122: { ! 123: long *lptr, exp_dest, op1, op2, exp_flg; ! 124: ! 125: for (;;) ! 126: { ! 127: setjmp(); ! 128: asm("m1: movab m1,_stpc"); ! 129: asm("movl $1,_subtst"); ! 130: lptr = destw+index; ! 131: op2 = dest = *lptr; /* Use pointer instead of index */ ! 132: /* dest = destw[index]; */ ! 133: lptr = sourcew+index; ! 134: op1 = source = *lptr; ! 135: /* source = sourcew[index]; */ ! 136: asm("movw _index,r10"); ! 137: asm("bicpsw $PSWMASK"); ! 138: asm("bispsw _flag_value[r10]"); ! 139: asm("movzwl _source+2,_dest"); /* memory to memory */ ! 140: asm("movpsl _psw"); /* save psw */ ! 141: psw &= FLAGS; /* Get flag bits */ ! 142: lptr = expwl+index; ! 143: exp_dest = *lptr; ! 144: if (dest != exp_dest) ! 145: { ! 146: asm("movl $1,_ercode"); ! 147: if (scoplp) longjmp(); ! 148: error(dest,exp_dest,op1,op2); ! 149: } ! 150: if (source != op1) ! 151: { ! 152: asm("movl $3,_ercode"); ! 153: if (scoplp) longjmp(); ! 154: error(source,op1,op1,op2); ! 155: } ! 156: lptr = exp_psw+index; ! 157: exp_flg = *lptr; ! 158: if (psw != exp_flg) ! 159: { ! 160: asm("movl $2,_ercode"); ! 161: if (scoplp) longjmp(); ! 162: error(psw,exp_flg,op1,op2,exp_flg,psw); ! 163: } ! 164: if (force_lp) longjmp(); ! 165: else ! 166: return(0); /*no error exit*/ ! 167: } ! 168: } ! 169: ! 170: static t_movzwl1() ! 171: { ! 172: long *lptr, op1, op2, exp_dest, exp_flg; ! 173: ! 174: for (;;) ! 175: { ! 176: setjmp(); ! 177: asm("m2: movab m2,_stpc"); ! 178: asm("movl $2,_subtst"); ! 179: lptr = sourcew+index; ! 180: op1 = source = *lptr; ! 181: /* source = sourcew[index]; */ ! 182: asm("movw _index,r10"); ! 183: asm("bicpsw $PSWMASK"); ! 184: asm("bispsw _flag_value[r10]"); ! 185: asm("movzwl _source+2,_source"); /* register to memory */ ! 186: asm("movpsl _psw"); /* Save psw */ ! 187: psw &= FLAGS; /* Get flags */ ! 188: lptr = expwl+index; ! 189: exp_dest = *lptr; ! 190: if (source != exp_dest) ! 191: { ! 192: asm("movl $1,_ercode"); ! 193: if (scoplp) longjmp(); ! 194: error(source,exp_dest,op1,op1); ! 195: } ! 196: lptr = exp_psw+index; ! 197: exp_flg = *lptr; ! 198: if (psw != exp_flg) ! 199: { ! 200: asm("movl $2,_ercode"); ! 201: if (scoplp) longjmp(); ! 202: error(psw,exp_flg,op1,op1); ! 203: } ! 204: if (force_lp) longjmp(); ! 205: else ! 206: return(0); /*no error exit*/ ! 207: } ! 208: } ! 209: ! 210: ! 211: ! 212: static movzbw() /* move zero extended byte to word test */ ! 213: { ! 214: asm("bicpsw $PSWMASK"); /*psw = 0*/ ! 215: for (index = 0; index < MAX_PATTERNS; index++) ! 216: { ! 217: t_movzbw (); ! 218: t_movzbw1(); /*one more test where */ ! 219: /* dest address = source address */ ! 220: t_movzbw2(); /*one more test where */ ! 221: /* register to register */ ! 222: } ! 223: } ! 224: ! 225: ! 226: static t_movzbw() ! 227: { ! 228: ! 229: for (;;) ! 230: { ! 231: setjmp(); ! 232: asm("m3: movab m3,_stpc"); ! 233: asm("movl $3,_subtst"); ! 234: dest = destb[index]; /*initialize destination, source, & psw */ ! 235: source = sourceb[index]; ! 236: asm("movw _index,r10"); ! 237: asm("bicpsw $PSWMASK"); ! 238: asm("bispsw _flag_value[r10]"); ! 239: asm("movzbw _source+3,_dest+2"); /* memory to memory */ ! 240: asm("movpsl _psw"); /*save psw */ ! 241: psw &= FLAGS; /*mask out all bits except flag bits */ ! 242: if (dest != expbw[index]) ! 243: { ! 244: asm("movl $1,_ercode"); ! 245: if (scoplp) longjmp(); ! 246: error(dest,expbw[index],source,destb[index],expbw[index],dest); ! 247: } ! 248: if (source != sourceb[index]) ! 249: { ! 250: asm("movl $3,_ercode"); ! 251: if (scoplp) longjmp(); ! 252: error(source,sourceb[index],source,destb[index]); ! 253: } ! 254: if (psw != exp_psw[index]) ! 255: { ! 256: asm("movl $2,_ercode"); ! 257: if (scoplp) longjmp(); ! 258: error(psw,exp_psw[index],source,destb[index]); ! 259: } ! 260: if (force_lp) longjmp(); ! 261: else ! 262: return(0); ! 263: } ! 264: } ! 265: ! 266: ! 267: ! 268: static t_movzbw1() ! 269: { ! 270: ! 271: for (;;) ! 272: { ! 273: /*initialize source, & psw */ ! 274: setjmp(); ! 275: asm("m4: movab m4,_stpc"); ! 276: asm("movl $4,_subtst"); ! 277: source = sourceb[index]; ! 278: asm("movw _index,r10"); ! 279: asm("movl _source,r5"); /* load source register */ ! 280: asm("bicpsw $PSWMASK"); ! 281: asm("bispsw _flag_value[r10]"); ! 282: asm("movzbw _source+3,_source+2"); ! 283: asm("movpsl _psw"); /*save psw */ ! 284: psw &= FLAGS; /*mask out all bits except flag bits */ ! 285: if (source != expbw[index]) ! 286: { ! 287: asm("movl $1,_ercode"); ! 288: if (scoplp) longjmp(); ! 289: error(source,expbw[index],sourceb[index],sourceb[index]); ! 290: } ! 291: if (psw != exp_psw[index]) ! 292: { ! 293: asm("movl $2,_ercode"); ! 294: if (scoplp) longjmp(); ! 295: error(psw,exp_psw[index],sourceb[index],sourceb[index]); ! 296: } ! 297: if (force_lp) longjmp(); ! 298: else ! 299: return(0); ! 300: } ! 301: } ! 302: ! 303: static t_movzbw2() ! 304: { ! 305: ! 306: for (;;) ! 307: { ! 308: /*initialize source, & psw */ ! 309: setjmp(); ! 310: asm("m5: movab m5,_stpc"); ! 311: asm("movl $5,_subtst"); ! 312: source = sourceb[index]; ! 313: asm("movw _index,r10"); ! 314: asm("movl _source,r5"); /* load source register */ ! 315: asm("movl _source,r6"); /* load dest register */ ! 316: asm("bicpsw $PSWMASK"); ! 317: asm("bispsw _flag_value[r10]"); ! 318: asm("movzbw _source+3,_source+2"); ! 319: asm("movpsl _psw"); /*save psw */ ! 320: psw &= FLAGS; /*mask out all bits except flag bits */ ! 321: if (source != expbw[index]) ! 322: { ! 323: asm("movl $1,_ercode"); ! 324: if (scoplp) longjmp(); ! 325: error(source,expbw[index],sourceb[index],sourceb[index]); ! 326: } ! 327: if (psw != exp_psw[index]) ! 328: { ! 329: asm("movl $2,_ercode"); ! 330: if (scoplp) longjmp(); ! 331: error(psw,exp_psw[index],sourceb[index],sourceb[index]); ! 332: } ! 333: if (force_lp) longjmp(); ! 334: else ! 335: return(0); ! 336: } ! 337: } ! 338: ! 339: static movzbl() ! 340: { ! 341: asm("bicpsw $PSWMASK"); /*psw = 0*/ ! 342: for (index = 0; index < MAX_PATTERNS; index++) ! 343: { ! 344: t_movzbl (); ! 345: t_movzbl1(); /*one more test where */ ! 346: /* dest address = source address */ ! 347: } ! 348: } ! 349: ! 350: static t_movzbl() ! 351: { ! 352: ! 353: for (;;) ! 354: { ! 355: setjmp(); ! 356: asm("m6: movab m6,_stpc"); ! 357: asm("movl $6,_subtst"); ! 358: dest = destb[index]; /*initialize destination, source, & psw */ ! 359: source = sourceb[index]; ! 360: asm("movw _index,r10"); ! 361: asm("bicpsw $PSWMASK"); ! 362: asm("bispsw _flag_value[r10]"); ! 363: asm("movzbl _source+3,_dest"); /* memory to memory */ ! 364: asm("movpsl _psw"); /*save psw */ ! 365: psw &= FLAGS; /*mask out all bits except flag bits */ ! 366: if (dest != expbl[index]) ! 367: { ! 368: asm("movl $1,_ercode"); ! 369: if (scoplp) longjmp(); ! 370: error(dest,expbl[index],source,destb[index]); ! 371: } ! 372: if (source != sourceb[index]) ! 373: { ! 374: asm("movl $3,_ercode"); ! 375: if (scoplp) longjmp(); ! 376: error(source,sourceb[index],source,destb[index]); ! 377: } ! 378: if (psw != exp_psw[index]) ! 379: { ! 380: asm("movl $2,_ercode"); ! 381: if (scoplp) longjmp(); ! 382: error(psw,exp_psw[index],source,destb[index]); ! 383: } ! 384: if (force_lp) longjmp(); ! 385: else ! 386: return(0); /*no error exit*/ ! 387: } ! 388: } ! 389: ! 390: ! 391: ! 392: static t_movzbl1() ! 393: { ! 394: for (;;) ! 395: { ! 396: /*initialize source, & psw */ ! 397: setjmp(); ! 398: asm("m7: movab m7,_stpc"); ! 399: asm("movl $7,_subtst"); ! 400: source = sourceb[index]; ! 401: asm("movw _index,r10"); ! 402: asm("movl _source,r5"); /* load source register */ ! 403: asm("bicpsw $PSWMASK"); ! 404: asm("bispsw _flag_value[r10]"); ! 405: /*execute movz instruction */ ! 406: asm("movzbl _source+3,_source"); /* register to memory */ ! 407: asm("movpsl _psw"); /*save psw */ ! 408: psw &= FLAGS; /*mask out all bits except flag bits */ ! 409: if (source != expbl[index]) ! 410: { ! 411: asm("movl $1,_ercode"); ! 412: if (scoplp) longjmp(); ! 413: error(source,expbl[index],sourceb[index],sourceb[index]); ! 414: } ! 415: if (psw != exp_psw[index]) ! 416: { ! 417: asm("movl $2,_ercode"); ! 418: if (scoplp) longjmp(); ! 419: error(psw,exp_psw[index],sourceb[index],sourceb[index]); ! 420: } ! 421: if (force_lp) longjmp(); ! 422: else ! 423: return(0); /*no error exit*/ ! 424: } ! 425: } ! 426: ! 427:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.