diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
commit | 22f703cab05b7cd368f4de9e03991b7664dc5022 (patch) | |
tree | 6f4d50beaa42328e24b1c6b56b6ec059e4ef21a5 /imdi/ctest.c |
Initial import of argyll version 1.5.1-8debian/1.5.1-8
Diffstat (limited to 'imdi/ctest.c')
-rw-r--r-- | imdi/ctest.c | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/imdi/ctest.c b/imdi/ctest.c new file mode 100644 index 0000000..caf0692 --- /dev/null +++ b/imdi/ctest.c @@ -0,0 +1,156 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <memory.h> + +/* Test frame for cgen.c IMDI generation code */ +/* + * Copyright 2000 - 2006 Graeme W. Gill + * All rights reserved. + * + * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :- + * see the License.txt file for licencing details. + */ + +#include "imdi.h" +#include "imdi_tab.h" + + +int +main(void) { + int rv; + genspec gs, ogs; + tabspec ts, ots; + mach_arch ar; + FILE *kcode; + + /* Zero out the gen and tabspecs, to give diff a place to start */ + memset((void *)&ogs, 0, sizeof(genspec)); + memset((void *)&gs, 0, sizeof(genspec)); + memset((void *)&ots, 0, sizeof(tabspec)); + memset((void *)&ts, 0, sizeof(tabspec)); + + printf("Testing gen_c_kernel\n"); + + if ((kcode = fopen("imdi_k99.c","w")) == NULL) { + printf("Couldn't open 'imdi_k99.c'\n"); + return -1; + } + + /* Setup an interpolation kernel specification */ + gs.id = 4; /* Number of input dimensions */ + + gs.in.pint = 1; /* Flag - nonz if pixel interleaved */ + gs.in.packed = 0; /* Flag - nonz if channels packed into one read */ + + gs.in.bpch[0] = 8; /* Bits per channel */ + gs.in.chi[0] = 4; /* Channel increment */ + gs.in.bov[0] = 0; /* Bit offset to value within channel */ + gs.in.bpv[0] = 8; /* Bits per value within channel */ + + gs.in.bpch[1] = 8; /* Bits per channel */ + gs.in.chi[1] = 4; /* Channel increment */ + gs.in.bov[1] = 0; /* Bit offset to value within channel */ + gs.in.bpv[1] = 8; /* Bits per value within channel */ + + gs.in.bpch[2] = 8; /* Bits per channel */ + gs.in.chi[2] = 4; /* Channel increment */ + gs.in.bov[2] = 0; /* Bit offset to value within channel */ + gs.in.bpv[2] = 8; /* Bits per value within channel */ + + gs.in.bpch[3] = 8; /* Bits per channel */ + gs.in.chi[3] = 4; /* Channel increment */ + gs.in.bov[3] = 0; /* Bit offset to value within channel */ + gs.in.bpv[3] = 8; /* Bits per value within channel */ + + gs.od = 1; /* Number of output dimensions */ + + gs.out.pint = 1; /* Flag - nonz if pixel interleaved */ + gs.out.packed = 0; /* Flag - nonz if channels packed into one write */ + + gs.out.bpch[0] = 8; /* Bits per channel */ + gs.out.chi[0] = 1; /* Channel increment */ + gs.out.bov[0] = 0; /* Bit offset to value within channel */ + gs.out.bpv[0] = 8; /* Bits per value within channel */ + + gs.out.bpch[1] = 8; /* Bits per channel */ + gs.out.chi[1] = 4; /* Channel increment */ + gs.out.bov[1] = 0; /* Bit offset to value within channel */ + gs.out.bpv[1] = 8; /* Bits per value within channel */ + + gs.out.bpch[2] = 8; /* Bits per channel */ + gs.out.chi[2] = 4; /* Channel increment */ + gs.out.bov[2] = 0; /* Bit offset to value within channel */ + gs.out.bpv[2] = 8; /* Bits per value within channel */ + + gs.out.bpch[3] = 8; /* Bits per channel */ + gs.out.chi[3] = 4; /* Channel increment */ + gs.out.bov[3] = 0; /* Bit offset to value within channel */ + gs.out.bpv[3] = 8; /* Bits per value within channel */ + + gs.out.bpch[4] = 8; /* Bits per channel */ + gs.out.chi[4] = 4; /* Channel increment */ + gs.out.bov[4] = 0; /* Bit offset to value within channel */ + gs.out.bpv[4] = 8; /* Bits per value within channel */ + + gs.out.bpch[5] = 8; /* Bits per channel */ + gs.out.chi[5] = 4; /* Channel increment */ + gs.out.bov[5] = 0; /* Bit offset to value within channel */ + gs.out.bpv[5] = 8; /* Bits per value within channel */ + + gs.opt = opts_none; /* Direction and stride options */ + + gs.prec = 8; /* Precsision needed */ + gs.itres = 16; /* Interpolation table resolution */ + gs.stres = 17; /* Simplex table resolution */ + + /* Setup a machine architecture */ + + ar.bigend = 0; /* Non-zero if this is a bigendian architecture */ + ar.uwa = 0; /* Use wide memory access */ + ar.shfm = 0; /* Use shifts to mask values */ + ar.oscale = 8; /* Has scaled indexing up to * 8 */ + ar.smmul = 0; /* Doesn't have fast small multiply for index scaling */ + + ar.pbits = 32; /* Number of bits in a pointer */ + + ar.nords = 3; /* Number of ord types */ + ar.ords[0].bits = 8; + ar.ords[0].name = "unsigned char"; + ar.ords[0].align = 1; + ar.ords[1].bits = 16; + ar.ords[1].name = "unsigned short"; + ar.ords[1].align = 1; + ar.ords[2].bits = 32; + ar.ords[2].name = "unsigned int"; + ar.ords[2].align = 1; +#ifdef ALLOW64 + ar.ords[3].bits = 64; + ar.ords[3].name = "unsigned longlong"; + ar.ords[3].align = 0; +#endif /* ALLOW64 */ + ar.natord = 2; /* Most natural type */ + + ar.nints = 3; /* Number of int types */ + ar.ints[0].bits = 8; + ar.ints[0].name = "signed char"; + ar.ints[0].align = 1; + ar.ints[1].bits = 16; + ar.ints[1].name = "short"; + ar.ints[1].align = 1; + ar.ints[2].bits = 32; + ar.ints[2].name = "int"; + ar.ints[2].align = 1; +#ifdef ALLOW64 + ar.ints[3].bits = 64; + ar.ints[3].name = "longlong"; + ar.ints[3].align = 0; +#endif /* ALLOW64 */ + ar.natint = 2; /* Most natural type */ + + rv = gen_c_kernel(&gs, &ts, &ar, kcode, 99, &ogs, &ots); + + fclose(kcode); + + return 0; +} |