Fix printvideo regression and minor improvements

This commit is contained in:
Justine Tunney 2020-08-26 09:41:07 -07:00
parent eb4bb43275
commit e86cff8ba0
25 changed files with 240 additions and 207 deletions

73
third_party/xed/x86.h vendored
View file

@ -1,10 +1,5 @@
#ifndef COSMOPOLITAN_THIRD_PARTY_XED_X86_H_
#define COSMOPOLITAN_THIRD_PARTY_XED_X86_H_
#include "libc/bits/bits.h"
#include "libc/runtime/runtime.h"
#include "libc/str/str.h"
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
/* ▓▓▓▓▓▓▓▓▓▓▓▓▓ ▄▄▄▄
@ -47,6 +42,9 @@ COSMOPOLITAN_C_START_
#define xed_sib_scale(M) (((M)&0xff) >> 6)
#define xed_get_modrm_reg_field(M) (((M)&0x38) >> 3)
#if !(__ASSEMBLER__ + __LINKER__ + 0)
COSMOPOLITAN_C_START_
enum XedMachineMode {
XED_MACHINE_MODE_INVALID,
XED_MACHINE_MODE_LONG_64,
@ -321,44 +319,44 @@ struct XedChipFeatures {
};
struct XedOperands { /*
prefix66
log𝑏
rexx
index
mod
rexb
base
asz
rex REGISTER
rexb DISPATCH
srm ENCODING
rexw
rex
rexb
rm
osz
rex
rexr
reg
2 2
82421812 6 0
rep
log𝑏
rexx
index
mod
rexb
base
asz
rex REGISTER
rexb DISPATCH
srm ENCODING
rexw
rex
rexb
rm
osz
rex
rexr
reg
2 2
82421812 6 0
0b00000000000000000000000000000000*/
uint32_t rde;
bool osz : 1; // operand size override prefix
bool rexw : 1; // rex.w or rex.wb or etc. 64-bit override
bool rexb : 1; // rex.b or rex.wb or etc. see modrm table
bool rexr : 1; // rex.r or rex.wr or etc. see modrm table
bool rex : 1; // any rex prefix including rex
bool asz : 1; // address size override
bool rexx : 1; // rex.x or rex.wx or etc. see sib table
bool rexw : 1; // rex.w or rex.wb or etc. 64-bit override
bool rexb : 1; // rex.b or rex.wb or etc. see modrm table
bool rexr : 1; // rex.r or rex.wr or etc. see modrm table
bool rex : 1; // any rex prefix including rex
bool rexx : 1; // rex.x or rex.wx or etc. see sib table
bool rexrr : 1; // evex
bool asz : 1; // address size override
bool osz : 1; // operand size override prefix
bool out_of_bytes : 1;
bool is_intel_specific : 1;
bool ild_f2 : 1;
bool ild_f3 : 1;
bool has_modrm : 1;
bool has_sib : 1;
bool prefix66 : 1; // rexw except for xmm ops
bool realmode : 1;
bool amd3dnow : 1;
uint8_t max_bytes;
@ -385,8 +383,6 @@ struct XedOperands { /*
uint8_t map : 4; // enum XedIldMap
uint8_t hint : 2; // static branch prediction
uint8_t seg_ovd : 3; // XED_SEG_xx
uint8_t first_f2f3 : 2; // internal see rep, ild_f2, ild_f3
uint8_t last_f2f3 : 2; // internal see rep, ild_f2, ild_f3
uint8_t error : 5; // enum XedError
uint8_t mode : 3; // real,legacy,long
uint8_t rep : 2; // 0, 2 (0xf2 repnz), 3 (0xf3 rep/repe)
@ -410,7 +406,6 @@ struct XedOperands { /*
uint8_t vex_prefix; // vex
uint8_t zeroing; // evex
uint8_t bcrc; // evex
uint8_t rexrr; // evex
uint8_t llrc; // evex
uint8_t vl; // evex
uint8_t mask; // evex
@ -453,7 +448,7 @@ forceinline void xed_operands_set_mode(struct XedOperands *p,
p->mode = 0;
break;
default:
abort();
unreachable;
}
}