validate.c File Reference

#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 Documentation

#define ALL_FLAGS   (F_CF | F_PF | F_AF | F_ZF | F_SF | F_OF)
 

#define false   0
 

#define true   1
 

#define VAL_BYTE_BYTE_BINARY name   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_BINARY(u8,u8,0xFF,0xFF,1,1)   \
    VAL_TEST_BINARY(name)                   \
    VAL_FAIL_BYTE_BYTE_BINARY(name)         \
    VAL_END_BINARY()

#define VAL_BYTE_DIV name   ) 
 

#define VAL_BYTE_MUL name   ) 
 

#define VAL_BYTE_ROTATE name   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_BINARY(u8,u8,0xFF,8,1,1)      \
    VAL_TEST_BINARY(name)                   \
    VAL_FAIL_BYTE_BYTE_BINARY(name)         \
    VAL_END_BINARY()

#define VAL_BYTE_UNARY name   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_UNARY(u8,0xFF,0x1)            \
    VAL_TEST_UNARY(name)                    \
    VAL_FAIL_BYTE_UNARY(name)               \
    VAL_END_UNARY()

 
#define VAL_END_BINARY  ) 
 

Value:

}                                                       \
                M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF);   \
                if (failed)                                                 \
                    break;                                                  \
                }                                                           \
            if (failed)                                                     \
                break;                                                      \
            }                                                               \
        if (failed)                                                         \
            break;                                                          \
        }                                                                   \
    if (!failed)                                                            \
        printk("passed\n");                                                 \
}

 
#define VAL_END_TERNARY  ) 
 

Value:

}                                                       \
                    M.x86.R_EFLG = inflags = flags = def_flags | (ALL_FLAGS & ~F_OF);   \
                    if (failed)                                                 \
                        break;                                                  \
                    }                                                           \
                if (failed)                                                     \
                    break;                                                      \
                }                                                               \
            if (failed)                                                     \
                break;                                                      \
            }                                                               \
        if (failed)                                                         \
            break;                                                          \
        }                                                                   \
    if (!failed)                                                            \
        printk("passed\n");                                                 \
}

 
#define VAL_END_UNARY  ) 
 

Value:

}                                                       \
            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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

#define VAL_LONG_LONG_BINARY name   ) 
 

Value:

printk("Validating %s ... ", #name);                                \
    VAL_START_BINARY(u32,u32,0xFF000000,0xFF000000,0x1000000,0x1000000) \
    VAL_TEST_BINARY(name)                                               \
    VAL_FAIL_LONG_LONG_BINARY(name)                                     \
    VAL_END_BINARY()

#define VAL_LONG_MUL name   ) 
 

#define VAL_LONG_ROTATE name   ) 
 

Value:

printk("Validating %s ... ", #name);                                \
    VAL_START_BINARY(u32,u32,0xFF000000,32,0x1000000,1)                 \
    VAL_TEST_BINARY(name)                                               \
    VAL_FAIL_LONG_LONG_BINARY(name)                                     \
    VAL_END_BINARY()

#define VAL_LONG_ROTATE_DBL name   ) 
 

Value:

printk("Validating %s ... ", #name);                                    \
    VAL_START_TERNARY(u32,u32,0xFF000000,0xFF000000,0x1000000,0x1000000,32) \
    VAL_TEST_TERNARY(name)                                                  \
    VAL_FAIL_LONG_LONG_TERNARY(name)                                        \
    VAL_END_TERNARY()

#define VAL_LONG_UNARY name   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_UNARY(u32,0xFF000000,0x1000000) \
    VAL_TEST_UNARY(name)                    \
    VAL_FAIL_LONG_UNARY(name)               \
    VAL_END_UNARY()

#define VAL_START_BINARY parm_type,
res_type,
dmax,
smax,
dincr,
sincr   ) 
 

Value:

{                                                                   \
    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   ) 
 

Value:

{                                                                   \
    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   ) 
 

Value:

{                                                           \
    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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

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   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_BINARY(u8,u8,0xFF,0xFF,1,1)   \
    VAL_TEST_BINARY_VOID(name)              \
    VAL_FAIL_BYTE_BYTE_BINARY(name)         \
    VAL_END_BINARY()

#define VAL_VOID_LONG_BINARY name   ) 
 

Value:

printk("Validating %s ... ", #name);                                \
    VAL_START_BINARY(u32,u32,0xFF000000,0xFF000000,0x1000000,0x1000000) \
    VAL_TEST_BINARY_VOID(name)                                          \
    VAL_FAIL_LONG_LONG_BINARY(name)                                     \
    VAL_END_BINARY()

#define VAL_VOID_WORD_BINARY name   ) 
 

Value:

printk("Validating %s ... ", #name);                \
    VAL_START_BINARY(u16,u16,0xFF00,0xFF00,0x100,0x100) \
    VAL_TEST_BINARY_VOID(name)                          \
    VAL_FAIL_WORD_WORD_BINARY(name)                     \
    VAL_END_BINARY()

#define VAL_WORD_BYTE_UNARY name   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_UNARY(u16,0xFF,0x1)           \
    VAL_TEST_UNARY(name)                    \
    VAL_FAIL_WORD_UNARY(name)               \
    VAL_END_UNARY()

#define VAL_WORD_DIV name   ) 
 

#define VAL_WORD_MUL name   ) 
 

#define VAL_WORD_ROTATE name   ) 
 

Value:

printk("Validating %s ... ", #name);                \
    VAL_START_BINARY(u16,u16,0xFF00,16,0x100,1)         \
    VAL_TEST_BINARY(name)                               \
    VAL_FAIL_WORD_WORD_BINARY(name)                     \
    VAL_END_BINARY()

#define VAL_WORD_ROTATE_DBL name   ) 
 

Value:

printk("Validating %s ... ", #name);                    \
    VAL_START_TERNARY(u16,u16,0xFF00,0xFF00,0x100,0x100,16) \
    VAL_TEST_TERNARY(name)                                  \
    VAL_FAIL_WORD_WORD_TERNARY(name)                        \
    VAL_END_TERNARY()

#define VAL_WORD_UNARY name   ) 
 

Value:

printk("Validating %s ... ", #name);    \
    VAL_START_UNARY(u16,0xFF00,0x100)       \
    VAL_TEST_UNARY(name)                    \
    VAL_FAIL_WORD_UNARY(name)               \
    VAL_END_UNARY()

#define VAL_WORD_WORD_BINARY name   ) 
 

Value:

printk("Validating %s ... ", #name);                \
    VAL_START_BINARY(u16,u16,0xFF00,0xFF00,0x100,0x100) \
    VAL_TEST_BINARY(name)                               \
    VAL_FAIL_WORD_WORD_BINARY(name)                     \
    VAL_END_BINARY()


Function Documentation

int main int  argc  ) 
 

char* print_flags char *  buf,
ulong  flags
 

void printk const char *  fmt,
  ...