libhd
5.0
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include "x86emu.h"
#include "x86emu/prim_asm.h"
Defines | |
#define | true 1 |
#define | false 0 |
#define | ALL_FLAGS (F_CF | F_PF | F_AF | F_ZF | F_SF | F_OF) |
#define | VAL_START_BINARY(parm_type, res_type, dmax, smax, dincr, sincr) |
#define | VAL_TEST_BINARY(name) |
#define | VAL_TEST_BINARY_VOID(name) |
#define | VAL_FAIL_BYTE_BYTE_BINARY(name) |
#define | VAL_FAIL_WORD_WORD_BINARY(name) |
#define | VAL_FAIL_LONG_LONG_BINARY(name) |
#define | VAL_END_BINARY() |
#define | VAL_BYTE_BYTE_BINARY(name) |
#define | VAL_WORD_WORD_BINARY(name) |
#define | VAL_LONG_LONG_BINARY(name) |
#define | VAL_VOID_BYTE_BINARY(name) |
#define | VAL_VOID_WORD_BINARY(name) |
#define | VAL_VOID_LONG_BINARY(name) |
#define | VAL_BYTE_ROTATE(name) |
#define | VAL_WORD_ROTATE(name) |
#define | VAL_LONG_ROTATE(name) |
#define | VAL_START_TERNARY(parm_type, res_type, dmax, smax, dincr, sincr, maxshift) |
#define | VAL_TEST_TERNARY(name) |
#define | VAL_FAIL_WORD_WORD_TERNARY(name) |
#define | VAL_FAIL_LONG_LONG_TERNARY(name) |
#define | VAL_END_TERNARY() |
#define | VAL_WORD_ROTATE_DBL(name) |
#define | VAL_LONG_ROTATE_DBL(name) |
#define | VAL_START_UNARY(parm_type, max, incr) |
#define | VAL_TEST_UNARY(name) |
#define | VAL_FAIL_BYTE_UNARY(name) |
#define | VAL_FAIL_WORD_UNARY(name) |
#define | VAL_FAIL_LONG_UNARY(name) |
#define | VAL_END_UNARY() |
#define | VAL_BYTE_UNARY(name) |
#define | VAL_WORD_UNARY(name) |
#define | VAL_WORD_BYTE_UNARY(name) |
#define | VAL_LONG_UNARY(name) |
#define | VAL_BYTE_MUL(name) |
#define | VAL_WORD_MUL(name) |
#define | VAL_LONG_MUL(name) |
#define | VAL_BYTE_DIV(name) |
#define | VAL_WORD_DIV(name) |
#define | VAL_LONG_DIV(name) |
Functions | |
void | printk (const char *fmt,...) |
char * | print_flags (char *buf, ulong flags) |
int | main (int argc) |
#define false 0 |
#define true 1 |
#define VAL_BYTE_BYTE_BINARY | ( | name | ) |
#define VAL_BYTE_DIV | ( | name | ) |
Referenced by main().
#define VAL_BYTE_MUL | ( | name | ) |
Referenced by main().
#define VAL_BYTE_ROTATE | ( | name | ) |
#define VAL_BYTE_UNARY | ( | name | ) |
#define VAL_END_BINARY | ( | ) |
#define VAL_END_TERNARY | ( | ) |
#define VAL_END_UNARY | ( | ) |
} \ M.x86.R_EFLG = inflags = flags = def_flags | ALL_FLAGS; \ if (failed) \ break; \ } \ if (failed) \ break; \ } \ if (!failed) \ printk("passed\n"); \ }
#define VAL_FAIL_BYTE_BYTE_BINARY | ( | name | ) |
if (failed) \ printk("fail\n"); \ printk("0x%02X = %-15s(0x%02X,0x%02X), flags = %s -> %s\n", \ r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%02X = %-15s(0x%02X,0x%02X), flags = %s -> %s\n", \ r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_BYTE_UNARY | ( | name | ) |
printk("fail\n"); \ printk("0x%02X = %-15s(0x%02X), flags = %s -> %s\n", \ r, #name, d, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%02X = %-15s(0x%02X), flags = %s -> %s\n", \ r_asm, #name"_asm", d, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_LONG_LONG_BINARY | ( | name | ) |
if (failed) \ printk("fail\n"); \ printk("0x%08X = %-15s(0x%08X,0x%08X), flags = %s -> %s\n", \ r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%08X = %-15s(0x%08X,0x%08X), flags = %s -> %s\n", \ r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_LONG_LONG_TERNARY | ( | name | ) |
if (failed) \ printk("fail\n"); \ printk("0x%08X = %-15s(0x%08X,0x%08X,%d), flags = %s -> %s\n", \ r, #name, d, s, shift, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%08X = %-15s(0x%08X,0x%08X,%d), flags = %s -> %s\n", \ r_asm, #name"_asm", d, s, shift, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_LONG_UNARY | ( | name | ) |
printk("fail\n"); \ printk("0x%08X = %-15s(0x%08X), flags = %s -> %s\n", \ r, #name, d, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%08X = %-15s(0x%08X), flags = %s -> %s\n", \ r_asm, #name"_asm", d, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_WORD_UNARY | ( | name | ) |
printk("fail\n"); \ printk("0x%04X = %-15s(0x%04X), flags = %s -> %s\n", \ r, #name, d, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%04X = %-15s(0x%04X), flags = %s -> %s\n", \ r_asm, #name"_asm", d, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_WORD_WORD_BINARY | ( | name | ) |
if (failed) \ printk("fail\n"); \ printk("0x%04X = %-15s(0x%04X,0x%04X), flags = %s -> %s\n", \ r, #name, d, s, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%04X = %-15s(0x%04X,0x%04X), flags = %s -> %s\n", \ r_asm, #name"_asm", d, s, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_FAIL_WORD_WORD_TERNARY | ( | name | ) |
if (failed) \ printk("fail\n"); \ printk("0x%04X = %-15s(0x%04X,0x%04X,%d), flags = %s -> %s\n", \ r, #name, d, s, shift, print_flags(buf1,inflags), print_flags(buf2,M.x86.R_EFLG)); \ printk("0x%04X = %-15s(0x%04X,0x%04X,%d), flags = %s -> %s\n", \ r_asm, #name"_asm", d, s, shift, print_flags(buf1,inflags), print_flags(buf2,flags));
#define VAL_LONG_DIV | ( | name | ) |
Referenced by main().
#define VAL_LONG_LONG_BINARY | ( | name | ) |
#define VAL_LONG_MUL | ( | name | ) |
Referenced by main().
#define VAL_LONG_ROTATE | ( | name | ) |
#define VAL_LONG_ROTATE_DBL | ( | name | ) |
#define VAL_LONG_UNARY | ( | name | ) |
#define VAL_START_BINARY | ( | parm_type, | |
res_type, | |||
dmax, | |||
smax, | |||
dincr, | |||
sincr | |||
) |
{ \
parm_type d,s; \
res_type r,r_asm; \
ulong flags,inflags; \
int f,failed = false; \
char buf1[80],buf2[80]; \
for (d = 0; d < dmax; d += dincr) { \
for (s = 0; s < smax; s += sincr) { \
M.x86.R_EFLG = inflags = flags = def_flags; \
for (f = 0; f < 2; f++) {
#define VAL_START_TERNARY | ( | parm_type, | |
res_type, | |||
dmax, | |||
smax, | |||
dincr, | |||
sincr, | |||
maxshift | |||
) |
{ \
parm_type d,s; \
res_type r,r_asm; \
u8 shift; \
u32 flags,inflags; \
int f,failed = false; \
char buf1[80],buf2[80]; \
for (d = 0; d < dmax; d += dincr) { \
for (s = 0; s < smax; s += sincr) { \
for (shift = 0; shift < maxshift; shift += 1) { \
M.x86.R_EFLG = inflags = flags = def_flags; \
for (f = 0; f < 2; f++) {
#define VAL_START_UNARY | ( | parm_type, | |
max, | |||
incr | |||
) |
{ \
parm_type d,r,r_asm; \
u32 flags,inflags; \
int f,failed = false; \
char buf1[80],buf2[80]; \
for (d = 0; d < max; d += incr) { \
M.x86.R_EFLG = inflags = flags = def_flags; \
for (f = 0; f < 2; f++) {
#define VAL_TEST_BINARY | ( | name | ) |
r_asm = name##_asm(&flags,d,s); \ r = name(d,s); \ if (r != r_asm || M.x86.R_EFLG != flags) \ failed = true; \ if (failed || trace) {
#define VAL_TEST_BINARY_VOID | ( | name | ) |
name##_asm(&flags,d,s); \ name(d,s); \ r = r_asm = 0; \ if (M.x86.R_EFLG != flags) \ failed = true; \ if (failed || trace) {
#define VAL_TEST_TERNARY | ( | name | ) |
r_asm = name##_asm(&flags,d,s,shift); \ r = name(d,s,shift); \ if (r != r_asm || M.x86.R_EFLG != flags) \ failed = true; \ if (failed || trace) {
#define VAL_TEST_UNARY | ( | name | ) |
r_asm = name##_asm(&flags,d); \ r = name(d); \ if (r != r_asm || M.x86.R_EFLG != flags) { \ failed = true;
#define VAL_VOID_BYTE_BINARY | ( | name | ) |
#define VAL_VOID_LONG_BINARY | ( | name | ) |
#define VAL_VOID_WORD_BINARY | ( | name | ) |
#define VAL_WORD_BYTE_UNARY | ( | name | ) |
#define VAL_WORD_DIV | ( | name | ) |
Referenced by main().
#define VAL_WORD_MUL | ( | name | ) |
Referenced by main().
#define VAL_WORD_ROTATE | ( | name | ) |
#define VAL_WORD_ROTATE_DBL | ( | name | ) |
#define VAL_WORD_UNARY | ( | name | ) |
#define VAL_WORD_WORD_BINARY | ( | name | ) |
int main | ( | int | argc | ) |
References aaa_word(), aad_word(), aam_word(), aas_word(), adc_byte(), adc_long(), adc_word(), add_byte(), add_long(), add_word(), ALL_FLAGS, and_byte(), and_long(), and_word(), cmp_byte(), cmp_long(), cmp_word(), daa_byte(), das_byte(), dec_byte(), dec_long(), dec_word(), div_byte(), div_long(), div_word(), idiv_byte(), idiv_long(), idiv_word(), imul_byte(), imul_long(), imul_word(), inc_byte(), inc_long(), inc_word(), M, mul_byte(), mul_long(), mul_word(), neg_byte(), neg_long(), neg_word(), not_byte(), not_long(), not_word(), or_byte(), or_long(), or_word(), rcl_byte(), rcl_long(), rcl_word(), rcr_byte(), rcr_long(), rcr_word(), rol_byte(), rol_long(), rol_word(), ror_byte(), ror_long(), ror_word(), sar_byte(), sar_long(), sar_word(), sbb_byte(), sbb_long(), sbb_word(), shl_byte(), shl_long(), shl_word(), shld_long(), shld_word(), shr_byte(), shr_long(), shr_word(), shrd_long(), shrd_word(), sub_byte(), sub_long(), sub_word(), test_byte(), test_long(), test_word(), VAL_BYTE_BYTE_BINARY, VAL_BYTE_DIV, VAL_BYTE_MUL, VAL_BYTE_ROTATE, VAL_BYTE_UNARY, VAL_LONG_DIV, VAL_LONG_LONG_BINARY, VAL_LONG_MUL, VAL_LONG_ROTATE, VAL_LONG_ROTATE_DBL, VAL_LONG_UNARY, VAL_VOID_BYTE_BINARY, VAL_VOID_LONG_BINARY, VAL_VOID_WORD_BINARY, VAL_WORD_DIV, VAL_WORD_MUL, VAL_WORD_ROTATE, VAL_WORD_ROTATE_DBL, VAL_WORD_UNARY, VAL_WORD_WORD_BINARY, xor_byte(), xor_long(), and xor_word().