Files
ftmemsim-valgrind/memcheck/tests/vbit-test/unary.c
Carl Love 59fc40a7f3 vbit-tester, add counts for the number of 1, 2, 3 and 4 operand tests.
This patch adds code to count the number of each type of test.  The
number of 1, 2, 3 and 4 operand tests that are generated by the vbit-tester
are counted and printed by the vbit-tester.  The user should refer to the
Valgrind output to see if any of the tests failed.

The existing two verbose levels was increased by one level and the the
new output giving the number of tests was inserted as the first verbose
level.  The verbose levels are now:

-v        shows the number of 1, 2, 3 and 4 operand tests that are generated
-v -v     shows IROps being tested
-v -v -v  extreme edition, shows input values

This patch is for bugzilla 309229

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13124
2012-11-16 19:41:21 +00:00

74 lines
1.7 KiB
C

/* -*- mode: C; c-basic-offset: 3; -*- */
#include <assert.h>
#include "vtest.h"
/* Check the result of a unary operation. */
static void
check_result_for_unary(const irop_t *op, const test_data_t *data)
{
const opnd_t *result = &data->result;
const opnd_t *opnd = &data->opnds[0];
unsigned num_bits = result->vbits.num_bits;
vbits_t expected_vbits;
/* Only handle those undef-kinds that actually occur. */
switch (op->undef_kind) {
case UNDEF_ALL:
expected_vbits = undefined_vbits(num_bits);
break;
case UNDEF_SAME:
expected_vbits = opnd->vbits;
break;
case UNDEF_TRUNC:
expected_vbits = truncate_vbits(opnd->vbits, num_bits);
break;
case UNDEF_LEFT:
expected_vbits = left_vbits(opnd->vbits, num_bits);
break;
case UNDEF_UPPER:
assert(num_bits * 2 == opnd->vbits.num_bits);
expected_vbits = upper_vbits(opnd->vbits);
break;
case UNDEF_SEXT:
expected_vbits = sextend_vbits(opnd->vbits, num_bits);
break;
case UNDEF_ZEXT:
expected_vbits = zextend_vbits(opnd->vbits, num_bits);
break;
default:
panic(__func__);
}
if (! equal_vbits(result->vbits, expected_vbits))
complain(op, data, expected_vbits);
}
int
test_unary_op(const irop_t *op, test_data_t *data)
{
unsigned num_input_bits, bitpos;
int tests_done = 0;
num_input_bits = bitsof_irtype(data->opnds[0].type);
for (bitpos = 0; bitpos < num_input_bits; ++bitpos) {
data->opnds[0].vbits = onehot_vbits(bitpos, num_input_bits);
valgrind_execute_test(op, data);
check_result_for_unary(op, data);
tests_done++;
}
return tests_done;
}