123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /*
- Author : Shay Gal-On, EEMBC
- This file is part of EEMBC(R) and CoreMark(TM), which are Copyright (C) 2009
- All rights reserved.
- EEMBC CoreMark Software is a product of EEMBC and is provided under the terms of the
- CoreMark License that is distributed with the official EEMBC COREMARK Software release.
- If you received this EEMBC CoreMark Software without the accompanying CoreMark License,
- you must discontinue use and download the official release from www.coremark.org.
- Also, if you are publicly displaying scores generated from the EEMBC CoreMark software,
- make sure that you are in compliance with Run and Reporting rules specified in the accompanying readme.txt file.
- EEMBC
- 4354 Town Center Blvd. Suite 114-200
- El Dorado Hills, CA, 95762
- */
- /* Topic: Description
- This file contains declarations of the various benchmark functions.
- */
- /* Configuration: TOTAL_DATA_SIZE
- Define total size for data algorithms will operate on
- */
- #ifndef TOTAL_DATA_SIZE
- #define TOTAL_DATA_SIZE 2*1000
- #endif
- #define SEED_ARG 0
- #define SEED_FUNC 1
- #define SEED_VOLATILE 2
- #define MEM_STATIC 0
- #define MEM_MALLOC 1
- #define MEM_STACK 2
- #include "core_portme.h"
- #if HAS_STDIO
- #include <stdio.h>
- #endif
- #if HAS_PRINTF
- #define ee_printf printf
- #endif
- /* Actual benchmark execution in iterate */
- void *iterate(void *pres);
- /* Typedef: secs_ret
- For machines that have floating point support, get number of seconds as a double.
- Otherwise an unsigned int.
- */
- #if HAS_FLOAT
- typedef double secs_ret;
- #else
- typedef ee_u32 secs_ret;
- #endif
- #if MAIN_HAS_NORETURN
- #define MAIN_RETURN_VAL
- #define MAIN_RETURN_TYPE void
- #else
- #define MAIN_RETURN_VAL 0
- #define MAIN_RETURN_TYPE int
- #endif
- void start_time(void);
- void stop_time(void);
- CORE_TICKS get_time(void);
- secs_ret time_in_secs(CORE_TICKS ticks);
- /* Misc useful functions */
- ee_u16 crcu8(ee_u8 data, ee_u16 crc);
- ee_u16 crc16(ee_s16 newval, ee_u16 crc);
- ee_u16 crcu16(ee_u16 newval, ee_u16 crc);
- ee_u16 crcu32(ee_u32 newval, ee_u16 crc);
- ee_u8 check_data_types();
- void *portable_malloc(ee_size_t size);
- void portable_free(void *p);
- ee_s32 parseval(char *valstring);
- /* Algorithm IDS */
- #define ID_LIST (1<<0)
- #define ID_MATRIX (1<<1)
- #define ID_STATE (1<<2)
- #define ALL_ALGORITHMS_MASK (ID_LIST|ID_MATRIX|ID_STATE)
- #define NUM_ALGORITHMS 3
- /* list data structures */
- typedef struct list_data_s {
- ee_s16 data16;
- ee_s16 idx;
- } list_data;
- typedef struct list_head_s {
- struct list_head_s *next;
- struct list_data_s *info;
- } list_head;
- /*matrix benchmark related stuff */
- #define MATDAT_INT 1
- #if MATDAT_INT
- typedef ee_s16 MATDAT;
- typedef ee_s32 MATRES;
- #else
- typedef ee_f16 MATDAT;
- typedef ee_f32 MATRES;
- #endif
- typedef struct MAT_PARAMS_S {
- int N;
- MATDAT *A;
- MATDAT *B;
- MATRES *C;
- } mat_params;
- /* state machine related stuff */
- /* List of all the possible states for the FSM */
- typedef enum CORE_STATE {
- CORE_START=0,
- CORE_INVALID,
- CORE_S1,
- CORE_S2,
- CORE_INT,
- CORE_FLOAT,
- CORE_EXPONENT,
- CORE_SCIENTIFIC,
- NUM_CORE_STATES
- } core_state_e ;
-
- /* Helper structure to hold results */
- typedef struct RESULTS_S {
- /* inputs */
- ee_s16 seed1; /* Initializing seed */
- ee_s16 seed2; /* Initializing seed */
- ee_s16 seed3; /* Initializing seed */
- void *memblock[4]; /* Pointer to safe memory location */
- ee_u32 size; /* Size of the data */
- ee_u32 iterations; /* Number of iterations to execute */
- ee_u32 execs; /* Bitmask of operations to execute */
- struct list_head_s *list;
- mat_params mat;
- /* outputs */
- ee_u16 crc;
- ee_u16 crclist;
- ee_u16 crcmatrix;
- ee_u16 crcstate;
- ee_s16 err;
- /* ultithread specific */
- core_portable port;
- } core_results;
- /* Multicore execution handling */
- #if (MULTITHREAD>1)
- ee_u8 core_start_parallel(core_results *res);
- ee_u8 core_stop_parallel(core_results *res);
- #endif
- /* list benchmark functions */
- list_head *core_list_init(ee_u32 blksize, list_head *memblock, ee_s16 seed);
- ee_u16 core_bench_list(core_results *res, ee_s16 finder_idx);
- /* state benchmark functions */
- void core_init_state(ee_u32 size, ee_s16 seed, ee_u8 *p);
- ee_u16 core_bench_state(ee_u32 blksize, ee_u8 *memblock,
- ee_s16 seed1, ee_s16 seed2, ee_s16 step, ee_u16 crc);
- /* matrix benchmark functions */
- ee_u32 core_init_matrix(ee_u32 blksize, void *memblk, ee_s32 seed, mat_params *p);
- ee_u16 core_bench_matrix(mat_params *p, ee_s16 seed, ee_u16 crc);
|