From 100f517ab37265acdf067e36b6860020ec8b2184 Mon Sep 17 00:00:00 2001 From: Chris Johns Date: Fri, 9 May 2014 21:50:37 +1000 Subject: covoar: Merger the covoar source from rtems-testing.git. Use waf to build covoar. --- tester/covoar/Target_arm.cc | 87 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 tester/covoar/Target_arm.cc (limited to 'tester/covoar/Target_arm.cc') diff --git a/tester/covoar/Target_arm.cc b/tester/covoar/Target_arm.cc new file mode 100644 index 0000000..a2b65c8 --- /dev/null +++ b/tester/covoar/Target_arm.cc @@ -0,0 +1,87 @@ +/*! @file Target_arm.cc + * @brief Target_arm Implementation + * + * This file contains the implementation of the base class for + * functions supporting target unique functionallity. + */ +#include "Target_arm.h" +#include +#include +#include +#include + +namespace Target { + + Target_arm::Target_arm( std::string targetName ): + TargetBase( targetName ) + { + branchInstructions.push_back("bcc"); + branchInstructions.push_back("bcs"); + branchInstructions.push_back("beq"); + branchInstructions.push_back("bge"); + branchInstructions.push_back("bgt"); + branchInstructions.push_back("bhi"); + branchInstructions.push_back("bl-hi"); + branchInstructions.push_back("bl-lo"); + branchInstructions.push_back("ble"); + branchInstructions.push_back("bls"); + branchInstructions.push_back("blt"); + branchInstructions.push_back("bmi"); + branchInstructions.push_back("bne"); + branchInstructions.push_back("bpl"); + branchInstructions.push_back("bvc"); + branchInstructions.push_back("bvs"); + + branchInstructions.sort(); + + } + + Target_arm::~Target_arm() + { + } + + bool Target_arm::isNopLine( + const char* const line, + int& size + ) + { + if (!strcmp( &line[strlen(line)-3], "nop")) { + size = 4; + return true; + } + + // On ARM, there are literal tables at the end of methods. + // We need to avoid them. + if (!strncmp( &line[strlen(line)-10], ".byte", 5)) { + size = 1; + return true; + } + if (!strncmp( &line[strlen(line)-13], ".short", 6)) { + size = 2; + return true; + } + if (!strncmp( &line[strlen(line)-16], ".word", 5)) { + size = 4; + return true; + } + + return false; + + } + + bool Target_arm::isBranch( + const char* instruction + ) + { + fprintf( stderr, "DETERMINE BRANCH INSTRUCTIONS FOR THIS ARCHITECTURE! -- fix me\n" ); + exit( -1 ); + } + + TargetBase *Target_arm_Constructor( + std::string targetName + ) + { + return new Target_arm( targetName ); + } + +} -- cgit v1.2.3