|
|
1.1 ! root 1: ////////// ! 2: / n1/i386/tables/assign.t ! 3: ////////// ! 4: ! 5: ///////// ! 6: / ! 7: / Assignment (=). ! 8: / Longs, pointers, words, bytes, fields, doubles. ! 9: / The '=' operator is a non-conversion operator for integer types and pointers. ! 10: / There must be some special entries here to handle the cross type cases. ! 11: / ! 12: ///////// ! 13: ! 14: ASSIGN: ! 15: ! 16: ////////// ! 17: / ! 18: / Simple integer assignment. ! 19: / ! 20: ////////// ! 21: ! 22: ////////// ! 23: / Longs and pointers. ! 24: ////////// ! 25: ! 26: / Register dword = 0 or NULL. ! 27: % PEFFECT ! 28: DWORD NONE * * NONE ! 29: REG|MMX DWORD ! 30: 0|MMX * ! 31: [ZSUB] [AL],[AL] ! 32: ! 33: / Register dword = dword. ! 34: % PEFFECT ! 35: DWORD NONE * * NONE ! 36: REG|MMX DWORD ! 37: EASY|MMX DWORD ! 38: / Dword = register dword. ! 39: % PEFFECT ! 40: DWORD NONE * * NONE ! 41: ADR|LV DWORD ! 42: REG|MMX DWORD ! 43: [ZMOV] [AL],[AR] ! 44: ! 45: / Register dword = effective address. ! 46: % PEFFECT ! 47: DWORD NONE * * NONE ! 48: REG|MMX DWORD ! 49: LEA|MMX DWORD ! 50: [ZLEA] [AL],[NSE AR] ! 51: ! 52: / Integer or pointer = immediate. ! 53: % PEFFECT ! 54: DWORD NONE * * NONE ! 55: ADR|LV DWORD|SHORT ! 56: IMM|MMX DWORD ! 57: [TL ZMOV] [AL],[TL AR] ! 58: ! 59: / Dword = dword. ! 60: % PEFFECT|PVALUE|P_SRT ! 61: DWORD ANYR * ANYR TEMP ! 62: ADR|LV DWORD ! 63: TREG DWORD ! 64: [ZMOV] [AL],[AR] ! 65: ! 66: ////////// ! 67: / Words. ! 68: ////////// ! 69: ! 70: / Word = immediate word. ! 71: % PEFFECT ! 72: DWORD NONE * * NONE ! 73: ADR|LV WORD ! 74: IMM|MMX WORD ! 75: [ZMOVW] [AL],[AR] ! 76: ! 77: / Word = word. ! 78: % PEFFECT|PVALUE|PREL|P_SRT ! 79: LONG ANYR * ANYR TEMP ! 80: ADR|LV WORD ! 81: TREG WORD ! 82: [IFV] [TL ZMOVSX] [R],[LO RR] ! 83: [ZMOVW] [AL],[LO R] ! 84: [IFR] [ZCMPW] [LO R],[CONST 0] ! 85: [IFR] [REL0] [LAB] ! 86: ! 87: ////////// ! 88: / Bytes. ! 89: ////////// ! 90: ! 91: / Byte = immediate byte. ! 92: % PEFFECT ! 93: LONG NONE * * NONE ! 94: ADR|LV BYTE ! 95: IMM|MMX BYTE ! 96: [ZMOVB] [AL], [AR] ! 97: ! 98: / Byte = byte. ! 99: % PEFFECT|PVALUE|PREL|P_SRT|PBYTE ! 100: LONG ANYR * ANYR TEMP ! 101: ADR|LV BYTE ! 102: TREG BYTE ! 103: [IFV] [TL ZMOVSX] [R],[LO LO RR] ! 104: [ZMOVB] [AL],[LO LO R] ! 105: [IFR] [ZCMPB] [LO LO R],[CONST 0] ! 106: [IFR] [REL0] [LAB] ! 107: ! 108: ////////// ! 109: / ! 110: / Mixed type assignment. ! 111: / ! 112: ////////// ! 113: ! 114: / Dword = short. ! 115: % PEFFECT|PVALUE|P_SRT|PBYTE ! 116: DWORD ANYR * ANYR TEMP ! 117: ADR|LV DWORD ! 118: TREG SHORT ! 119: [TR ZMOVSX] [R],[TR RR] ! 120: [ZMOV] [AL],[R] ! 121: ! 122: / Short = long or pointer. ! 123: % PEFFECT|PVALUE|P_SRT|PBYTE ! 124: LONG ANYR * ANYR TEMP ! 125: ADR|LV SHORT ! 126: TREG DWORD ! 127: [TL ZMOV] [AL],[TL AR] ! 128: [IFV] [TL ZMOVSX] [R], [TL AR] ! 129: ! 130: ///////// ! 131: / ! 132: / Field assignment. ! 133: / The right operand has been preshifted and masked, ! 134: / just like the right side of an '|=' or '^=' operation. ! 135: / All you do is clear the junk and OR it in. ! 136: / In value context, unsigned result must be masked; ! 137: / signed result mask is unnecessary because of sign-extend shifts. ! 138: / ! 139: ///////// ! 140: ! 141: / Immediate to signed field. ! 142: % PEFFECT|PVALUE ! 143: FS32 ANYR * * TEMP ! 144: ADR|LV FLD ! 145: IMM|MMX LONG ! 146: [TL ZAND] [AL],[TL CMASK] / clear ! 147: [TL ZOR] [AL],[TL AR] / store ! 148: [IFV] [TL ZMOVZX] [R],[AL] / fetch ! 149: ! 150: / Immediate to unsigned field. ! 151: % PEFFECT|PVALUE ! 152: FU32 ANYR * * TEMP ! 153: ADR|LV FLD ! 154: IMM|MMX LONG ! 155: [TL ZAND] [AL],[TL CMASK] / clear ! 156: [TL ZOR] [AL],[TL AR] / store ! 157: [IFV] [TL ZMOVZX] [R],[AL] / fetch ! 158: [IFV] [ZAND] [R],[EMASK] / mask ! 159: ! 160: / Signed field. ! 161: % PEFFECT|PVALUE|P_SRT|PBYTE ! 162: FS32 ANYR * ANYR TEMP ! 163: ADR|LV FLD ! 164: TREG LONG ! 165: [TL ZAND] [AL],[TL CMASK] ! 166: [TL ZOR] [AL],[TL R] ! 167: [IFV] [TL ZMOVSX] [R],[AL] ! 168: ! 169: / Unsigned field. ! 170: % PEFFECT|PVALUE|P_SRT|PBYTE ! 171: FU32 ANYR * ANYR TEMP ! 172: ADR|LV FLD ! 173: TREG LONG ! 174: [TL ZAND] [AL],[TL CMASK] ! 175: [TL ZOR] [AL],[TL R] ! 176: [IFV] [TL ZMOVSX] [R],[AL] ! 177: [IFV] [ZAND] [R],[EMASK] ! 178: ! 179: ////////// ! 180: / Floating point. ! 181: ////////// ! 182: ! 183: / DECVAX and IEEE software floating point assignment. ! 184: / Zero and immediates are special. ! 185: / Floats are different for DECVAX and IEEE. ! 186: ! 187: / Double = 0. ! 188: % PEFFECT|PIEEE|PDECVAX ! 189: FF64 EAX * * NONE ! 190: ADR|LV FF64 ! 191: 0|MMX * ! 192: [ZSUB] [R],[R] ! 193: [ZMOV] [HI AL],[R] ! 194: [ZMOV] [LO AL],[R] ! 195: ! 196: / Double = constant. ! 197: % PEFFECT|PIEEE|PDECVAX ! 198: FF64 NONE * * NONE ! 199: ADR|LV FF64 ! 200: IMM|MMX FF64 ! 201: [ZMOV] [HI AL],[HI AR] ! 202: [ZMOV] [LO AL],[LO AR] ! 203: ! 204: / Double = double. ! 205: % PEFFECT|PVALUE|P_SRT|PIEEE|PDECVAX ! 206: FF64 EDXEAX * EDXEAX EDXEAX ! 207: ADR|LV FF64 ! 208: TREG FF64 ! 209: [ZMOV] [HI AL],[HI R] ! 210: [ZMOV] [LO AL],[LO R] ! 211: ! 212: / Assignment to 32-bit floats. ! 213: / Float = 0. ! 214: % PEFFECT|PDECVAX|PIEEE ! 215: FF64 EAX * * NONE ! 216: ADR|LV FF32 ! 217: 0|MMX * ! 218: [ZSUB] [R],[R] ! 219: [ZMOV] [AL],[R] ! 220: ! 221: / Float = constant, DECVAX. ! 222: % PEFFECT|PDECVAX ! 223: FF64 NONE * * NONE ! 224: ADR|LV FF32 ! 225: IMM|MMX FF64 ! 226: [ZMOV] [AL],[LO AR] ! 227: ! 228: / Float = constant, IEEE. ! 229: % PEFFECT|PVALUE|PDECVAX ! 230: FF64 EDXEAX * * TEMP ! 231: ADR|LV FF32 ! 232: IMM|MMX FF64 ! 233: [ZMOV] [HI R], [HI AR] ! 234: [ZMOV] [LO R], [LO AR] ! 235: [ZCALL] [GID _fdcvt] ! 236: [ZMOV] [AL],[LO R] ! 237: [IFV] [ZCALL] [GID _dfcvt] ! 238: ! 239: / Float = double or float, DECVAX. ! 240: % PEFFECT|PVALUE|P_SRT|PDECVAX ! 241: FF64 EDXEAX * EDXEAX EDXEAX ! 242: ADR|LV FF32 ! 243: TREG FLOAT ! 244: [ZMOV] [AL],[HI R] ! 245: ! 246: / Float = double or float, IEEE. ! 247: % PEFFECT|PVALUE|P_SRT|PIEEE ! 248: FF64 EDXEAX * EDXEAX EDXEAX ! 249: ADR|LV FF32 ! 250: TREG FLOAT ! 251: [ZCALL] [GID _fdcvt] ! 252: [ZMOV] [AL],[LO R] ! 253: [IFV] [ZCALL] [GID _dfcvt] ! 254: ! 255: / Hardware coprocessor (NDP) floating point. ! 256: / Pop the NDP stack on assignment for effect. ! 257: % PEFFECT|P_SRT|PNDP ! 258: FF64 FPAC * FPAC NONE ! 259: ADR|LV FLOAT ! 260: TREG FLOAT ! 261: [TL ZFSTPD] [AL] ! 262: ! 263: / Leave the value on the NDP stack on assignment for value. ! 264: % PVALUE|P_SRT|PNDP ! 265: FF64 FPAC * FPAC FPAC ! 266: ADR|LV FLOAT ! 267: TREG FLOAT ! 268: [TL ZFSTD] [AL] ! 269: ! 270: ////////// ! 271: / end of n1/i386/tables/assign.t ! 272: //////////
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.