Add wasm tacle-bench targets
This commit is contained in:
@ -0,0 +1,130 @@
|
||||
/*
|
||||
|
||||
This program is part of the TACLeBench benchmark suite.
|
||||
Version V 2.0
|
||||
|
||||
Name: lift
|
||||
|
||||
Author: Martin Schoeberl, Benedikt Huber
|
||||
|
||||
Function: Lift Controler
|
||||
|
||||
Source: C-Port from http://www.jopdesign.com/doc/jembench.pdf
|
||||
|
||||
Original name: run_lift.c
|
||||
|
||||
Changes: no major functional changes
|
||||
|
||||
License: GPL version 3 or later
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
Include section
|
||||
*/
|
||||
|
||||
#include "liftlibcontrol.h"
|
||||
#include "liftlibio.h"
|
||||
|
||||
/*
|
||||
Forward declaration of functions
|
||||
*/
|
||||
|
||||
// Wasm loop bounds
|
||||
|
||||
__attribute__((import_module("__pragma"), import_name("loopbound"))) extern void
|
||||
__pragma_loopbound(unsigned int min_bound, unsigned int max_bound);
|
||||
|
||||
void lift_controller();
|
||||
void lift_init();
|
||||
__attribute__((noinline)) __attribute__((export_name("entrypoint"))) void
|
||||
lift_main();
|
||||
int lift_return();
|
||||
|
||||
/*
|
||||
Declaration of global variables
|
||||
*/
|
||||
|
||||
int lift_checksum; /* Checksum */
|
||||
|
||||
/*
|
||||
Initialization- and return-value-related functions
|
||||
*/
|
||||
|
||||
void
|
||||
lift_init() {
|
||||
unsigned int i;
|
||||
unsigned char *p;
|
||||
volatile char bitmask = 0;
|
||||
|
||||
/*
|
||||
Apply volatile XOR-bitmask to entire input array.
|
||||
*/
|
||||
p = (unsigned char *) &lift_ctrl_io_in[0];
|
||||
__pragma_loopbound(40, 40);
|
||||
for (i = 0; i < sizeof(lift_ctrl_io_in); ++i, ++p)
|
||||
*p ^= bitmask;
|
||||
|
||||
p = (unsigned char *) &lift_ctrl_io_out[0];
|
||||
__pragma_loopbound(16, 16);
|
||||
for (i = 0; i < sizeof(lift_ctrl_io_out); ++i, ++p)
|
||||
*p ^= bitmask;
|
||||
|
||||
p = (unsigned char *) &lift_ctrl_io_analog[0];
|
||||
__pragma_loopbound(16, 16);
|
||||
for (i = 0; i < sizeof(lift_ctrl_io_analog); ++i, ++p)
|
||||
*p ^= bitmask;
|
||||
|
||||
p = (unsigned char *) &lift_ctrl_io_led[0];
|
||||
__pragma_loopbound(64, 64);
|
||||
for (i = 0; i < sizeof(lift_ctrl_io_led); ++i, ++p)
|
||||
*p ^= bitmask;
|
||||
|
||||
lift_checksum = 0;
|
||||
lift_ctrl_init();
|
||||
}
|
||||
|
||||
int
|
||||
lift_return() {
|
||||
return (lift_checksum - 4005888 != 0);
|
||||
}
|
||||
|
||||
/*
|
||||
Algorithm core functions
|
||||
*/
|
||||
|
||||
void
|
||||
lift_controller() {
|
||||
lift_ctrl_get_vals();
|
||||
lift_ctrl_loop();
|
||||
lift_ctrl_set_vals();
|
||||
}
|
||||
|
||||
/*
|
||||
Main functions
|
||||
*/
|
||||
|
||||
__attribute__((noinline)) __attribute__((export_name("entrypoint"))) void
|
||||
lift_main() {
|
||||
int i = 0;
|
||||
__pragma_loopbound(1001, 1001);
|
||||
while (1) {
|
||||
/* zero input stimulus */
|
||||
lift_simio_in = 0;
|
||||
lift_simio_adc1 = 0;
|
||||
lift_simio_adc2 = 0;
|
||||
lift_simio_adc3 = 0;
|
||||
/* run lift_controller */
|
||||
lift_controller();
|
||||
if (i++ >= 1000)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((noinline)) __attribute__((export_name("main"))) int
|
||||
main(void) {
|
||||
lift_init();
|
||||
lift_main();
|
||||
|
||||
return (lift_return());
|
||||
}
|
||||
Reference in New Issue
Block a user