|
|
1.1 ! root 1: ///////// ! 2: / ! 3: / Subtraction. ! 4: / Similar (at least in spirit) to addition. ! 5: / Some of the very strange cases are not required, ! 6: / since subtraction is not as reorderable as addition. ! 7: / Special stuff for LARGE model pointers. ! 8: / ! 9: ///////// ! 10: ! 11: SUB: ! 12: % PEFFECT|PRVALUE|PSREL|P_SLT ! 13: WORD ANYR ANYR * TEMP ! 14: TREG WORD ! 15: 1|MMX * ! 16: % PLVALUE|P_SLT ! 17: WORD ANYL ANYL * TEMP ! 18: TREG WORD ! 19: 1|MMX * ! 20: [ZDEC] [R] ! 21: [IFR] [REL0] [LAB] ! 22: ! 23: #ifndef ONLYSMALL ! 24: % PEFFECT|PRVALUE|P_SLT ! 25: LPTX ANYR ANYR * TEMP ! 26: TREG LPTX ! 27: 1|MMX * ! 28: % PLVALUE|P_SLT ! 29: LPTX ANYL ANYL * TEMP ! 30: TREG LPTX ! 31: 1|MMX * ! 32: [ZDEC] [LO R] ! 33: #endif ! 34: ! 35: ///////// ! 36: / ! 37: / A strange optimization for the i8086. ! 38: / It is just as fast as the subtract, and it is smaller. ! 39: / Thanks to Bob McNamara at Digital. ! 40: / ! 41: ///////// ! 42: ! 43: % PEFFECT|PRVALUE|PSREL|P_SLT ! 44: WORD ANYR ANYR * TEMP ! 45: TREG WORD ! 46: 2|MMX * ! 47: % PLVALUE|P_SLT ! 48: WORD ANYL ANYL * TEMP ! 49: TREG WORD ! 50: 2|MMX * ! 51: [ZDEC] [R] ! 52: [ZDEC] [R] ! 53: [IFR] [REL0] [LAB] ! 54: ! 55: #ifndef ONLYSMALL ! 56: % PEFFECT|PRVALUE|P_SLT ! 57: LPTX ANYR ANYR * TEMP ! 58: TREG LPTX ! 59: 2|MMX * ! 60: % PLVALUE|P_SLT ! 61: LPTX ANYL ANYL * TEMP ! 62: TREG LPTX ! 63: 2|MMX * ! 64: [ZDEC] [LO R] ! 65: [ZDEC] [LO R] ! 66: #endif ! 67: ! 68: ///////// ! 69: / ! 70: / Old fashoned subtraction. ! 71: / ! 72: ///////// ! 73: ! 74: % PEFFECT|PRVALUE|PSREL|P_SLT ! 75: WORD ANYR ANYR * TEMP ! 76: TREG WORD ! 77: ADR|IMM WORD ! 78: % PLVALUE|P_SLT ! 79: WORD ANYL ANYL * TEMP ! 80: TREG WORD ! 81: ADR|IMM WORD ! 82: [ZSUB] [R],[AR] ! 83: [IFR] [REL0] [LAB] ! 84: ! 85: #ifndef ONLYSMALL ! 86: % PEFFECT|PRVALUE|P_SLT ! 87: LPTX ANYR ANYR * TEMP ! 88: TREG LPTX ! 89: ADR|IMM WORD ! 90: % PLVALUE|P_SLT ! 91: LPTX ANYL ANYL * TEMP ! 92: TREG LPTX ! 93: ADR|IMM WORD ! 94: [ZSUB] [LO R],[AR] ! 95: #endif ! 96: ! 97: % PEFFECT|PRVALUE|PGE|PLT|P_SLT ! 98: LONG DXAX DXAX * DXAX ! 99: TREG LONG ! 100: ADR|IMM LONG ! 101: [ZSUB] [LO R],[LO AR] ! 102: [ZSBB] [HI R],[HI AR] ! 103: [IFR] [REL1] [LAB] ! 104: ! 105: #ifndef ONLYSMALL ! 106: % PEFFECT|PRVALUE|P_SLT ! 107: LPTX ANYR ANYR * TEMP ! 108: TREG LPTX ! 109: ADR|IMM LONG ! 110: % PLVALUE|P_SLT ! 111: LPTX ANYL ANYL * TEMP ! 112: TREG LPTX ! 113: ADR|IMM LONG ! 114: [ZSUB] [LO R],[LO AR] ! 115: #endif ! 116: ! 117: ///////// ! 118: / ! 119: / LARGE model pointer-pointer yields 1 word of result. ! 120: / Only RVALUE contexts need to be done. ! 121: / ! 122: ///////// ! 123: ! 124: #ifndef ONLYSMALL ! 125: % PRVALUE ! 126: WORD ANYR * * TEMP ! 127: DIR|IMM|MMX LPTX ! 128: DIR|IMM|MMX LPTX ! 129: [ZMOV] [R],[LO AL] ! 130: [ZSUB] [R],[LO AR] ! 131: ! 132: % PRVALUE ! 133: WORD DXAX DXAX * AX ! 134: TREG LPTX ! 135: ADR|IMM LPTX ! 136: [ZSUB] [LO R],[LO AR] ! 137: #endif ! 138: ! 139: //////// ! 140: / ! 141: / Floating point, using the numeric data coprocessor (8087). ! 142: / ! 143: //////// ! 144: ! 145: #ifdef NDPDEF ! 146: % PRVALUE|P_SLT ! 147: FF32|FF64 FPAC FPAC * FPAC ! 148: TREG FF64 ! 149: ADR FS16 ! 150: [ZFSUBI] [AR] ! 151: ! 152: % PRVALUE|P_SLT ! 153: FF32|FF64 FPAC FPAC * FPAC ! 154: TREG FF64 ! 155: ADR FS32 ! 156: [ZFSUBL] [AR] ! 157: ! 158: % PRVALUE|P_SLT ! 159: FF32|FF64 FPAC FPAC * FPAC ! 160: TREG FF64 ! 161: ADR FF32 ! 162: [ZFSUBF] [AR] ! 163: ! 164: % PRVALUE|P_SLT ! 165: FF32|FF64 FPAC FPAC * FPAC ! 166: TREG FF64 ! 167: ADR FF64 ! 168: [ZFSUBD] [AR] ! 169: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.