Source/Packages

Compiler.MachineX86Native

packages/compiler/src/Compiler/MachineX86Native.alpha

1,314 lines242 declarations56.6 KiBSHA-256 b3ccf0f17d32

def · lines 1074–1285

x86EncodeNativeInstruction

Full file
1074def x86EncodeNativeInstruction :
1075  (pi unrestricted instruction : (family X86NativeInstruction) . Bytes) =
1076  (lambda unrestricted instruction : (family X86NativeInstruction) .
1077    (eliminate
1078      X86NativeInstruction
1079      (lambda unrestricted value : (family X86NativeInstruction) . Bytes)
1080      instruction
1081      (branch
1082        X86NativeMoveImmediate32
1083        destination
1084        immediate
1085        .
1086        (bytes-append
1087          (x86NativeMoveImmediate32Head destination)
1088          (x86NativeImmediate32Bytes immediate)))
1089      (branch
1090        X86NativeMoveImmediate64
1091        destination
1092        immediate
1093        .
1094        (bytes-append
1095          (x86NativeMoveImmediate64Head destination)
1096          (x86NativeImmediate64Bytes immediate)))
1097      (branch X86NativeClear32 destination . (x86NativeClear32Bytes destination))
1098      (branch
1099        X86NativeMoveRegister64
1100        source
1101        destination
1102        .
1103        (x86NativeRegisterInstructionBytes (byte 137) source destination))
1104      (branch
1105        X86NativeAddRegister64
1106        source
1107        destination
1108        .
1109        (x86NativeRegisterInstructionBytes (byte 1) source destination))
1110      (branch
1111        X86NativeSubtractRegister64
1112        source
1113        destination
1114        .
1115        (x86NativeRegisterInstructionBytes (byte 41) source destination))
1116      (branch
1117        X86NativeAndRegister64
1118        source
1119        destination
1120        .
1121        (x86NativeRegisterInstructionBytes (byte 33) source destination))
1122      (branch
1123        X86NativeOrRegister64
1124        source
1125        destination
1126        .
1127        (x86NativeRegisterInstructionBytes (byte 9) source destination))
1128      (branch
1129        X86NativeXorRegister64
1130        source
1131        destination
1132        .
1133        (x86NativeRegisterInstructionBytes (byte 49) source destination))
1134      (branch
1135        X86NativeCompareRegister64
1136        source
1137        destination
1138        .
1139        (x86NativeRegisterInstructionBytes (byte 57) source destination))
1140      (branch
1141        X86NativeTestRegister64
1142        source
1143        destination
1144        .
1145        (x86NativeRegisterInstructionBytes (byte 133) source destination))
1146      (branch
1147        X86NativeAddImmediate64
1148        destination
1149        immediate
1150        .
1151        (bytes-append
1152          (x86NativeAddImmediate64Head destination)
1153          (x86NativeImmediate32Bytes immediate)))
1154      (branch
1155        X86NativeAndImmediate64
1156        destination
1157        immediate
1158        .
1159        (bytes-append
1160          (x86NativeAndImmediate64Head destination)
1161          (x86NativeImmediate32Bytes immediate)))
1162      (branch
1163        X86NativeCompareImmediate64
1164        destination
1165        immediate
1166        .
1167        (bytes-append
1168          (x86NativeCompareImmediate64Head destination)
1169          (x86NativeImmediate32Bytes immediate)))
1170      (branch
1171        X86NativeMultiplyImmediate64
1172        destination
1173        immediate
1174        .
1175        (bytes-append
1176          (x86NativeMultiplyImmediate64Head destination)
1177          (x86NativeImmediate32Bytes immediate)))
1178      (branch X86NativeMultiplyRegister64Unsigned source .
1179        (x86NativeRegisterInstructionBytes (byte 247) (constructor X86NativeRegister64 X86NativeRSP) source))
1180      (branch X86NativeDivideRegister64Unsigned divisor .
1181        (x86NativeRegisterInstructionBytes (byte 247) (constructor X86NativeRegister64 X86NativeRSI) divisor))
1182      (branch
1183        X86NativeShiftLeftImmediate64
1184        destination
1185        immediate
1186        .
1187        (bytes-append
1188          (x86NativeShiftLeftImmediate64Head destination)
1189          (x86NativeImmediate8Bytes immediate)))
1190      (branch
1191        X86NativeShiftRightImmediate64
1192        destination
1193        immediate
1194        .
1195        (bytes-append
1196          (x86NativeShiftRightImmediate64Head destination)
1197          (x86NativeImmediate8Bytes immediate)))
1198      (branch
1199        X86NativeLoadMemory64
1200        destination
1201        base
1202        displacement
1203        .
1204        (x86NativeMemoryInstructionBytes (bytes 139) destination base displacement))
1205      (branch
1206        X86NativeLoadMemory8ZeroExtend64
1207        destination
1208        base
1209        displacement
1210        .
1211        (x86NativeMemoryInstructionBytes (bytes 15 182) destination base displacement))
1212      (branch
1213        X86NativeLoadMemory32ZeroExtend64
1214        destination
1215        base
1216        displacement
1217        .
1218        (x86NativeMemoryInstruction32Bytes (bytes 139) destination base displacement))
1219      (branch
1220        X86NativeStoreMemory32
1221        base
1222        displacement
1223        source
1224        .
1225        (x86NativeMemoryInstruction32Bytes (bytes 137) source base displacement))
1226      (branch
1227        X86NativeStoreMemory64
1228        base
1229        displacement
1230        source
1231        .
1232        (x86NativeMemoryInstructionBytes (bytes 137) source base displacement))
1233      (branch
1234        X86NativeStoreMemory8
1235        base
1236        displacement
1237        source
1238        .
1239        (x86NativeMemoryInstructionBytes (bytes 136) source base displacement))
1240      (branch X86NativeStoreFence . (bytes 15 174 248))
1241      (branch
1242        X86NativeLoadEffectiveAddressRIP
1243        destination
1244        displacement
1245        .
1246        (bytes-append
1247          (x86NativeLoadEffectiveAddressRIPHead destination)
1248          (x86NativeDisplacement32Bytes displacement)))
1249      (branch
1250        X86NativeJumpRelative32
1251        displacement
1252        .
1253        (bytes-append (bytes 233) (x86NativeDisplacement32Bytes displacement)))
1254      (branch
1255        X86NativeJumpConditionRelative32
1256        condition
1257        displacement
1258        .
1259        (bytes-append
1260          (bytes 15 (x86NativeConditionOpcode condition))
1261          (x86NativeDisplacement32Bytes displacement)))
1262      (branch X86NativeCallRegister64 target . (x86NativeCallRegister64Bytes target))
1263      (branch X86NativeReturn . (bytes 195))
1264      (branch X86NativeSystemCall . (bytes 15 5))
1265      (branch X86NativeMoveToXMM64 destination source . (x86NativeXMMGeneralBytes (byte 102) 1 (byte 110) destination source))
1266      (branch X86NativeMoveFromXMM64 destination source . (x86NativeXMMGeneralBytes (byte 102) 1 (byte 126) source destination))
1267      (branch X86NativeMoveFromXMM32 destination source . (x86NativeXMMGeneralBytes (byte 102) 0 (byte 126) source destination))
1268      (branch
1269        X86NativeScalarDouble
1270        operation
1271        destination
1272        source
1273        .
1274        (bytes-append
1275          (bytes 242 15 (x86NativeScalarDoubleOpcode operation))
1276          (x86NativeModRMRegister (x86NativeRegisterXMMLow3 destination) (x86NativeRegisterXMMLow3 source))))
1277      (branch
1278        X86NativeScalarSingleToDouble
1279        destination
1280        source
1281        .
1282        (bytes-append
1283          (bytes 243 15 90)
1284          (x86NativeModRMRegister (x86NativeRegisterXMMLow3 destination) (x86NativeRegisterXMMLow3 source))))
1285      (branch X86NativeScalarDoubleFromInteger64 destination source . (x86NativeXMMGeneralBytes (byte 242) 1 (byte 42) destination source))))

The compiler supplied declaration spans and resolved links from this source snapshot. This page does not assert that this file belongs to a checked closure.