library/src/decoders/x86ASM/BP-x86OperandAnalysis.cc
// Retrieves the /digit number that translates into the reg
// collumn. -1 for fail.  0-7 for digit.
Retrieves the /digit number that translates into the reg
collumn. -1 for fail.  0-7 for digit.
Retrieves the / digit number that translates into the reg collumn . - 1 for fail . 0 - 7 for digit .
size_t X86_32_GetSlashDigitFromRm(unsigned char byte){
	if(
			(byte <= 0x7) ||
			(byte >= 0x40 && byte <= 0x47) ||
			(byte >= 0x80 && byte <= 0x87) ||
			(byte >= 0xc0 && byte <= 0xc7)
	){
		return 0;
	}
	if(
			(byte >= 0x08 && byte <= 0x0f) ||
			(byte >= 0x48 && byte <= 0x4f) ||
			(byte >= 0x88 && byte <= 0x8f) ||
			(byte >= 0xc8 && byte <= 0xcf)
	){
		return 1;
	}
	if(
			(byte >= 0x10 && byte <= 0x17) ||
			(byte >= 0x50 && byte <= 0x57) ||
			(byte >= 0x90 && byte <= 0x97) ||
			(byte >= 0xd0 && byte <= 0xd7)
	){
		return 2;
	}
	if(
			(byte >= 0x18 && byte <= 0x1f) ||
			(byte >= 0x58 && byte <= 0x5f) ||
			(byte >= 0x98 && byte <= 0x9f) ||
			(byte >= 0xd8 && byte <= 0xdf)
	){
		return 3;
	}
	if(
			(byte >= 0x20 && byte <= 0x27) ||
			(byte >= 0x60 && byte <= 0x67) ||
			(byte >= 0xa0 && byte <= 0xa7) ||
			(byte >= 0xe0 && byte <= 0xe7)
	){
		return 4;
	}
	if(
			(byte >= 0x28 && byte <= 0x2f) ||
			(byte >= 0x68 && byte <= 0x6f) ||
			(byte >= 0xa8 && byte <= 0xaf) ||
			(byte >= 0xe8 && byte <= 0xef)
	){
		return 5;
	}
	if(
			(byte >= 0x30 && byte <= 0x37) ||
			(byte >= 0x70 && byte <= 0x77) ||
			(byte >= 0xb0 && byte <= 0xb7) ||
			(byte >= 0xf0 && byte <= 0xf7)
	){
		return 6;
	}
	if(
			(byte >= 0x38 && byte <= 0x3f) ||
			(byte >= 0x78 && byte <= 0x7f) ||
			(byte >= 0xb8 && byte <= 0xbf) ||
			(byte >= 0xf8 && byte <= 0xff)
	){
		return 7;
	}
	return 0xbad;
}
size_t X86_32_GetSlashDigitFromRm ( unsigned char byte ) { if ( ( byte <= 0x7 ) || ( byte >= 0x40 && byte <= 0x47 ) || ( byte >= 0x80 && byte <= 0x87 ) || ( byte >= 0xc0 && byte <= 0xc7 ) ) { return 0 ; } if ( ( byte >= 0x08 && byte <= 0x0f ) || ( byte >= 0x48 && byte <= 0x4f ) || ( byte >= 0x88 && byte <= 0x8f ) || ( byte >= 0xc8 && byte <= 0xcf ) ) { return 1 ; } if ( ( byte >= 0x10 && byte <= 0x17 ) || ( byte >= 0x50 && byte <= 0x57 ) || ( byte >= 0x90 && byte <= 0x97 ) || ( byte >= 0xd0 && byte <= 0xd7 ) ) { return 2 ; } if ( ( byte >= 0x18 && byte <= 0x1f ) || ( byte >= 0x58 && byte <= 0x5f ) || ( byte >= 0x98 && byte <= 0x9f ) || ( byte >= 0xd8 && byte <= 0xdf ) ) { return 3 ; } if ( ( byte >= 0x20 && byte <= 0x27 ) || ( byte >= 0x60 && byte <= 0x67 ) || ( byte >= 0xa0 && byte <= 0xa7 ) || ( byte >= 0xe0 && byte <= 0xe7 ) ) { return 4 ; } if ( ( byte >= 0x28 && byte <= 0x2f ) || ( byte >= 0x68 && byte <= 0x6f ) || ( byte >= 0xa8 && byte <= 0xaf ) || ( byte >= 0xe8 && byte <= 0xef ) ) { return 5 ; } if ( ( byte >= 0x30 && byte <= 0x37 ) || ( byte >= 0x70 && byte <= 0x77 ) || ( byte >= 0xb0 && byte <= 0xb7 ) || ( byte >= 0xf0 && byte <= 0xf7 ) ) { return 6 ; } if ( ( byte >= 0x38 && byte <= 0x3f ) || ( byte >= 0x78 && byte <= 0x7f ) || ( byte >= 0xb8 && byte <= 0xbf ) || ( byte >= 0xf8 && byte <= 0xff ) ) { return 7 ; } return 0xbad ; }
Retrieves the /digit number that translates into the reg
collumn.
Retrieves the / digit number that translates into the reg collumn .
// slash 0 first // slash 1 next // slash 2 // slash 3 // slash 4 // slash 5 // slash 6 // slash 7 - last has to be 0xfe because of signed comparissons // should never get here, ever.