summaryrefslogtreecommitdiff
path: root/src/cuda-sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuda-sim')
-rw-r--r--src/cuda-sim/Makefile73
-rw-r--r--src/cuda-sim/cuda-sim.cc1
-rw-r--r--src/cuda-sim/instructions.cc34
-rw-r--r--src/cuda-sim/ptx.l3
-rw-r--r--src/cuda-sim/ptx.y2
-rw-r--r--src/cuda-sim/ptx_loader.cc187
-rw-r--r--src/cuda-sim/ptx_loader.h3
-rw-r--r--src/cuda-sim/ptx_parser.cc11
8 files changed, 233 insertions, 81 deletions
diff --git a/src/cuda-sim/Makefile b/src/cuda-sim/Makefile
index a475ca2..a70ee5f 100644
--- a/src/cuda-sim/Makefile
+++ b/src/cuda-sim/Makefile
@@ -159,13 +159,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/gnu/stubs-64.h
../../build/release/cuda-sim/cuda_device_printf.o: ptx.tab.h ptx_sim.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/stdlib.h
+../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/endian.h
+../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/sys/types.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/types.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/time.h
-../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/endian.h
-../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/sys/select.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/select.h
../../build/release/cuda-sim/cuda_device_printf.o: /usr/include/bits/sigset.h
@@ -193,13 +195,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/wordsize.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/gnu/stubs.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/gnu/stubs-64.h
+../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/cuda-sim.o: /usr/include/endian.h
+../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/sys/types.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/types.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/time.h
-../../build/release/cuda-sim/cuda-sim.o: /usr/include/endian.h
-../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/sys/select.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/select.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/sigset.h
@@ -242,6 +246,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/cuda-sim.o: /usr/include/zconf.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/unistd.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/posix_opt.h
+../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/environments.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/bits/confname.h
../../build/release/cuda-sim/cuda-sim.o: /usr/include/getopt.h
../../build/release/cuda-sim/cuda-sim.o: ../gpgpu-sim/scoreboard.h
@@ -261,13 +266,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/instructions.o: /usr/include/gnu/stubs-64.h
../../build/release/cuda-sim/instructions.o: ptx.tab.h ptx_sim.h
../../build/release/cuda-sim/instructions.o: /usr/include/stdlib.h
+../../build/release/cuda-sim/instructions.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/instructions.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/instructions.o: /usr/include/endian.h
+../../build/release/cuda-sim/instructions.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/instructions.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/instructions.o: /usr/include/sys/types.h
../../build/release/cuda-sim/instructions.o: /usr/include/bits/types.h
../../build/release/cuda-sim/instructions.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/instructions.o: /usr/include/time.h
-../../build/release/cuda-sim/instructions.o: /usr/include/endian.h
-../../build/release/cuda-sim/instructions.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/instructions.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/instructions.o: /usr/include/sys/select.h
../../build/release/cuda-sim/instructions.o: /usr/include/bits/select.h
../../build/release/cuda-sim/instructions.o: /usr/include/bits/sigset.h
@@ -311,6 +318,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/instructions.o: /usr/include/zconf.h
../../build/release/cuda-sim/instructions.o: /usr/include/unistd.h
../../build/release/cuda-sim/instructions.o: /usr/include/bits/posix_opt.h
+../../build/release/cuda-sim/instructions.o: /usr/include/bits/environments.h
../../build/release/cuda-sim/instructions.o: /usr/include/bits/confname.h
../../build/release/cuda-sim/instructions.o: /usr/include/getopt.h
../../build/release/cuda-sim/instructions.o: ../gpgpu-sim/scoreboard.h
@@ -336,11 +344,13 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/memory.o: /usr/include/bits/stdio_lim.h
../../build/release/cuda-sim/memory.o: /usr/include/bits/sys_errlist.h
../../build/release/cuda-sim/memory.o: /usr/include/stdlib.h
-../../build/release/cuda-sim/memory.o: /usr/include/sys/types.h
-../../build/release/cuda-sim/memory.o: /usr/include/time.h
+../../build/release/cuda-sim/memory.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/memory.o: /usr/include/bits/waitstatus.h
../../build/release/cuda-sim/memory.o: /usr/include/endian.h
../../build/release/cuda-sim/memory.o: /usr/include/bits/endian.h
../../build/release/cuda-sim/memory.o: /usr/include/bits/byteswap.h
+../../build/release/cuda-sim/memory.o: /usr/include/sys/types.h
+../../build/release/cuda-sim/memory.o: /usr/include/time.h
../../build/release/cuda-sim/memory.o: /usr/include/sys/select.h
../../build/release/cuda-sim/memory.o: /usr/include/bits/select.h
../../build/release/cuda-sim/memory.o: /usr/include/bits/sigset.h
@@ -358,13 +368,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/ptx_ir.o: /usr/include/gnu/stubs.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/gnu/stubs-64.h ptx.tab.h
../../build/release/cuda-sim/ptx_ir.o: ptx_sim.h /usr/include/stdlib.h
+../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/ptx_ir.o: /usr/include/endian.h
+../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/sys/types.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/types.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/time.h
-../../build/release/cuda-sim/ptx_ir.o: /usr/include/endian.h
-../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/sys/select.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/select.h
../../build/release/cuda-sim/ptx_ir.o: /usr/include/bits/sigset.h
@@ -393,13 +405,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/ptx_loader.o: /usr/include/gnu/stubs-64.h
../../build/release/cuda-sim/ptx_loader.o: ptx.tab.h ptx_sim.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/stdlib.h
+../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/ptx_loader.o: /usr/include/endian.h
+../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/sys/types.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/types.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/time.h
-../../build/release/cuda-sim/ptx_loader.o: /usr/include/endian.h
-../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/sys/select.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/select.h
../../build/release/cuda-sim/ptx_loader.o: /usr/include/bits/sigset.h
@@ -433,13 +447,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/ptx_parser.o: /usr/include/gnu/stubs-64.h
../../build/release/cuda-sim/ptx_parser.o: ptx.tab.h ptx_sim.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/stdlib.h
+../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/ptx_parser.o: /usr/include/endian.h
+../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/sys/types.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/types.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/time.h
-../../build/release/cuda-sim/ptx_parser.o: /usr/include/endian.h
-../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/sys/select.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/select.h
../../build/release/cuda-sim/ptx_parser.o: /usr/include/bits/sigset.h
@@ -465,13 +481,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/wordsize.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/gnu/stubs.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/gnu/stubs-64.h
+../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/ptx_sim.o: /usr/include/endian.h
+../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/sys/types.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/types.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/time.h
-../../build/release/cuda-sim/ptx_sim.o: /usr/include/endian.h
-../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/sys/select.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/select.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/sigset.h
@@ -513,6 +531,7 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/ptx_sim.o: /usr/include/zconf.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/unistd.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/posix_opt.h
+../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/environments.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/bits/confname.h
../../build/release/cuda-sim/ptx_sim.o: /usr/include/getopt.h
../../build/release/cuda-sim/ptx_sim.o: ../gpgpu-sim/scoreboard.h
@@ -530,13 +549,15 @@ $(OUTPUT_DIR)/lex.ptx_.o: ptx.tab.c
../../build/release/cuda-sim/ptx-stats.o: /usr/include/gnu/stubs-64.h
../../build/release/cuda-sim/ptx-stats.o: ptx.tab.h ptx_sim.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/stdlib.h
+../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/waitflags.h
+../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/waitstatus.h
+../../build/release/cuda-sim/ptx-stats.o: /usr/include/endian.h
+../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/endian.h
+../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/sys/types.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/types.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/typesizes.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/time.h
-../../build/release/cuda-sim/ptx-stats.o: /usr/include/endian.h
-../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/endian.h
-../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/byteswap.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/sys/select.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/select.h
../../build/release/cuda-sim/ptx-stats.o: /usr/include/bits/sigset.h
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index d8c2c00..7d8d254 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -43,6 +43,7 @@
#include "ptx_loader.h"
#include "ptx_parser.h"
#include "../gpgpu-sim/gpu-sim.h"
+#include "ptx_sim.h"
#include "../gpgpusim_entrypoint.h"
#include "decuda_pred_table/decuda_pred_table.h"
#include "../stream_manager.h"
diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc
index 550a076..4537bd0 100644
--- a/src/cuda-sim/instructions.cc
+++ b/src/cuda-sim/instructions.cc
@@ -80,11 +80,12 @@ ptx_reg_t ptx_thread_info::get_reg( const symbol *reg )
const std::string &name = reg->name();
unsigned call_uid = m_callstack.back().m_call_uid;
ptx_reg_t uninit_reg;
- uninit_reg.u32 = 0xDEADBEEF;
+ uninit_reg.u32 = 0x0;
set_reg(reg, uninit_reg); // give it a value since we are going to warn the user anyway
std::string file_loc = get_location();
if( !unfound_register_warned ) {
- printf("GPGPU-Sim PTX: WARNING (%s) ** reading undefined register \'%s\' (cuid:%u). Setting to 0XDEADBEEF.\n",
+ printf("GPGPU-Sim PTX: WARNING (%s) ** reading undefined register \'%s\' (cuid:%u). Setting to 0X00000000. This is okay if you are simulating the native ISA"
+ "\n",
file_loc.c_str(), name.c_str(), call_uid );
unfound_register_warned = true;
}
@@ -818,13 +819,21 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread )
const operand_info &src2 = pI->src2(); // b
// Get operand values
- src1_data = thread->get_operand_value(src1, dst, to_type, thread, 1); // a
- src2_data = thread->get_operand_value(src2, dst, to_type, thread, 1); // b
+ if (dst.get_symbol()->type()){
+ src1_data = thread->get_operand_value(src1, dst, to_type, thread, 1); // a
+ src2_data = thread->get_operand_value(src2, dst, to_type, thread, 1); // b
+ } else {
+ //This is the case whent he first argument (dest) is '_'
+ src1_data = thread->get_operand_value(src1, src1, to_type, thread, 1); // a
+ src2_data = thread->get_operand_value(src2, src1, to_type, thread, 1); // b
+ }
// Copy value pointed to in operand 'a' into register 'd'
// (i.e. copy src1_data to dst)
thread->get_global_memory()->read(src1_data.u32,size/8,&data.s64);
- thread->set_operand_value(dst, data, to_type, thread, pI); // Write value into register 'd'
+ if (dst.get_symbol()->type()){
+ thread->set_operand_value(dst, data, to_type, thread, pI); // Write value into register 'd'
+ }
// Get the atomic operation to be performed
unsigned m_atomic_spec = pI->get_atomic();
@@ -1080,7 +1089,12 @@ void atom_impl( const ptx_instruction *pI, ptx_thread_info *thread )
const operand_info &src1 = pI->src1();
const operand_info &dst = pI->dst();
unsigned i_type = pI->get_type();
- ptx_reg_t src1_data = thread->get_operand_value(src1, dst, i_type, thread, 1);
+ ptx_reg_t src1_data;
+ if (dst.get_symbol()->type()){
+ src1_data = thread->get_operand_value(src1, dst, i_type, thread, 1);
+ } else {
+ src1_data = thread->get_operand_value(src1, src1, i_type, thread, 1);
+ }
memory_space_t space = pI->get_space();
@@ -1944,10 +1958,10 @@ void ex2_impl( const ptx_instruction *pI, ptx_thread_info *thread )
}
void exit_impl( const ptx_instruction *pI, ptx_thread_info *thread )
-{
+{
+ thread->set_done();
thread->exitCore();
thread->registerExit();
- thread->set_done();
}
void mad_def( const ptx_instruction *pI, ptx_thread_info *thread );
@@ -2755,9 +2769,9 @@ void ret_impl( const ptx_instruction *pI, ptx_thread_info *thread )
{
bool empty = thread->callstack_pop();
if( empty ) {
+ thread->set_done();
thread->exitCore();
thread->registerExit();
- thread->set_done();
}
}
@@ -2766,9 +2780,9 @@ void retp_impl( const ptx_instruction *pI, ptx_thread_info *thread )
{
bool empty = thread->callstack_pop_plus();
if( empty ) {
+ thread->set_done();
thread->exitCore();
thread->registerExit();
- thread->set_done();
}
}
diff --git a/src/cuda-sim/ptx.l b/src/cuda-sim/ptx.l
index 70d4c23..8c330fc 100644
--- a/src/cuda-sim/ptx.l
+++ b/src/cuda-sim/ptx.l
@@ -381,8 +381,9 @@ breakaddr TC; ptx_lval.int_value = BREAKADDR_OP; return OPCODE;
[^\"]* TC; ptx_lval.string_value = strdup(yytext);
}
-<INITIAL,NOT_OPCODE>. TC; ptx_error((const char*)NULL);
+<*>\t@@DWARF.*\n
+<INITIAL,NOT_OPCODE>. TC; ptx_error((const char*)NULL);
%%
extern int g_error_detected;
diff --git a/src/cuda-sim/ptx.y b/src/cuda-sim/ptx.y
index f0b67fb..430fc00 100644
--- a/src/cuda-sim/ptx.y
+++ b/src/cuda-sim/ptx.y
@@ -476,7 +476,9 @@ operand: IDENTIFIER { add_scalar_operand( $1 ); }
| tex_operand
| IDENTIFIER PLUS INT_OPERAND { add_address_operand($1,$3); }
| IDENTIFIER LO_OPTION { add_scalar_operand( $1 ); change_operand_lohi(1);}
+ | MINUS IDENTIFIER LO_OPTION { add_scalar_operand( $2 ); change_operand_lohi(1); change_operand_neg();}
| IDENTIFIER HI_OPTION { add_scalar_operand( $1 ); change_operand_lohi(2);}
+ | MINUS IDENTIFIER HI_OPTION { add_scalar_operand( $2 ); change_operand_lohi(2); change_operand_neg();}
| IDENTIFIER PIPE IDENTIFIER { add_2vector_operand($1,$3); change_double_operand_type(-1);}
| IDENTIFIER PIPE IDENTIFIER LO_OPTION { add_2vector_operand($1,$3); change_double_operand_type(-1); change_operand_lohi(1);}
| IDENTIFIER PIPE IDENTIFIER HI_OPTION { add_2vector_operand($1,$3); change_double_operand_type(-1); change_operand_lohi(2);}
diff --git a/src/cuda-sim/ptx_loader.cc b/src/cuda-sim/ptx_loader.cc
index 61a357e..d3d87f7 100644
--- a/src/cuda-sim/ptx_loader.cc
+++ b/src/cuda-sim/ptx_loader.cc
@@ -29,6 +29,7 @@
#include "ptx_ir.h"
#include "cuda-sim.h"
#include "ptx_parser.h"
+#include <unistd.h>
#include <dirent.h>
#include <fstream>
@@ -45,7 +46,7 @@ bool g_override_embedded_ptx = false;
extern "C" int ptx_parse();
extern "C" int ptx__scan_string(const char*);
-const char *g_ptxinfo_filename = NULL;
+extern "C" const char *g_ptxinfo_filename = NULL;
extern "C" int ptxinfo_parse();
extern "C" int ptxinfo_debug;
extern "C" FILE *ptxinfo_in;
@@ -89,8 +90,9 @@ void print_ptx_file( const char *p, unsigned source_num, const char *filename )
fflush(stdout);
}
-char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubin_str, unsigned source_num, bool save_converted )
+char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubin_str, unsigned source_num, bool save_converted, bool cuobjdump)
{
+
printf("GPGPU-Sim PTX: converting EMBEDDED .ptx file to ptxplus \n");
// Extract ptx to a file
@@ -104,49 +106,60 @@ char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubi
fprintf(ptxfile,"%s",ptx_str);
fclose(ptxfile);
- // Extract cubin to a file
- char fname_cubin[1024];
- snprintf(fname_cubin,1024,"_cubin_XXXXXX");
- int fd2=mkstemp(fname_cubin);
- close(fd2);
-
- printf("GPGPU-Sim PTX: extracting embedded cubin to temporary file \"%s\"\n", fname_cubin);
- FILE *cubinfile = fopen(fname_cubin,"w");
- fprintf(cubinfile,"%s",cubin_str);
- fclose(cubinfile);
+ char fname_ptxplus[1024];
+ snprintf(fname_ptxplus,1024,"_ptxplus_XXXXXX");
+ int fd4=mkstemp(fname_ptxplus);
+ close(fd4);
- // Run decuda
+ // Extract cubin to a file
char fname_decuda[1024];
- snprintf(fname_decuda,1024,"_decuda_XXXXXX");
- int fd3=mkstemp(fname_decuda);
- close(fd3);
+ char fname_cubin[1024];
+ if( !cuobjdump){
- char decuda_commandline[1024];
- snprintf(decuda_commandline,1024,"$DECUDA_INSTALL_PATH/decuda.py -o %s %s", fname_decuda, fname_cubin);
+ snprintf(fname_cubin,1024,"_cubin_XXXXXX");
+ int fd2=mkstemp(fname_cubin);
+ close(fd2);
- printf("GPGPU-Sim PTX: calling decuda on cubin file, decuda output file = \"%s\"\n", fname_decuda);
- int decuda_result = system(decuda_commandline);
- if( decuda_result != 0 ) {
- printf("GPGPU-Sim PTX: ERROR ** while calling decuda (b) %d\n", decuda_result);
- printf(" Ensure env variable DECUDA_INSTALL_PATH is set and points to decuda base directory.\n");
- exit(1);
- }
+ printf("GPGPU-Sim PTX: extracting embedded cubin to temporary file \"%s\"\n", fname_cubin);
+ FILE *cubinfile = fopen(fname_cubin,"w");
+ fprintf(cubinfile,"%s",cubin_str);
+ fclose(cubinfile);
- // Run decuda_to_ptxplus
- char fname_ptxplus[1024];
- snprintf(fname_ptxplus,1024,"_ptxplus_XXXXXX");
- int fd4=mkstemp(fname_ptxplus);
- close(fd4);
- char d2pp_commandline[1024];
- snprintf(d2pp_commandline,1024,"$D2PP_INSTALL_PATH/decuda_to_ptxplus %s %s %s %s > /dev/null", fname_decuda, fname_ptx, fname_cubin, fname_ptxplus);
+ snprintf(fname_decuda,1024,"_decuda_XXXXXX");
+ int fd3=mkstemp(fname_decuda);
+ close(fd3);
- printf("GPGPU-Sim PTX: calling decuda_to_ptxplus, ptxplus output file = \"%s\"\n", fname_ptxplus);
- int d2pp_result = system(d2pp_commandline);
- if( d2pp_result != 0 ) {
- printf("GPGPU-Sim PTX: ERROR ** while calling decuda_to_ptxplus %d\n", d2pp_result);
- printf(" Ensure env variable D2PP_INSTALL_PATH is set and points to decuda_to_ptxplus base directory.\n");
- exit(1);
+ // Run decuda
+ char decuda_commandline[1024];
+ snprintf(decuda_commandline,1024,"$DECUDA_INSTALL_PATH/decuda.py -o %s %s", fname_decuda, fname_cubin);
+ printf("GPGPU-Sim PTX: calling decuda on cubin file, decuda output file = \"%s\"\n", fname_decuda);
+ int decuda_result = system(decuda_commandline);
+ if( decuda_result != 0 ) {
+ printf("GPGPU-Sim PTX: ERROR ** while calling decuda (b) %d\n", decuda_result);
+ printf(" Ensure env variable DECUDA_INSTALL_PATH is set and points to decuda base directory.\n");
+ exit(1);
+ }
+ // Run decuda_to_ptxplus
+ char d2pp_commandline[1024];
+ snprintf(d2pp_commandline,1024,"$D2PP_INSTALL_PATH/decuda_to_ptxplus %s %s %s %s > /dev/null", fname_decuda, fname_ptx, fname_cubin, fname_ptxplus);
+ printf("GPGPU-Sim PTX: calling decuda_to_ptxplus, ptxplus output file = \"%s\"\n", fname_ptxplus);
+ int d2pp_result = system(d2pp_commandline);
+ if( d2pp_result != 0 ) {
+ printf("GPGPU-Sim PTX: ERROR ** while calling decuda_to_ptxplus %d\n", d2pp_result);
+ printf(" Ensure env variable D2PP_INSTALL_PATH is set and points to decuda_to_ptxplus base directory.\n");
+ exit(1);
+ }
+ }
+ else {
+ // Run cuobjdump_to_ptxplus
+ char commandline[1024];
+ int result;
+ snprintf(commandline, 1024, "$GPGPUSIM_ROOT/cuobjdump_to_ptxplus/cuobjdump_to_ptxplus /proc/%d/exe %s", getpid(), fname_ptxplus);
+ fflush(stdout);
+ printf("GPGPU-Sim PTX: calling cuobjdump_to_ptxplus on exe file, output file = \"%s\"\n", fname_ptxplus);
+ result = system(commandline);
+ if(result){printf("GPGPU-Sim PTX: ERROR ** could not execute %s\n", commandline); exit(1);}
}
// Get ptxplus from file
@@ -173,7 +186,12 @@ char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubi
// Remove temporary files
char rm_commandline[1024];
- snprintf(rm_commandline,1024,"rm -f %s %s %s %s", fname_ptx, fname_cubin, fname_decuda, fname_ptxplus);
+ if (!cuobjdump) {
+ snprintf(rm_commandline,1024,"rm -f %s %s %s %s", fname_ptx, fname_cubin, fname_decuda, fname_ptxplus);
+ }
+ else {
+ snprintf(rm_commandline,1024,"rm -f %s %s", fname_ptx, fname_ptxplus);
+ }
printf("GPGPU-Sim PTX: removing temporary files using \"%s\"\n", rm_commandline);
int rm_result = system(rm_commandline);
if( rm_result != 0 ) {
@@ -186,6 +204,92 @@ char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubi
return ptxplus_str;
}
+char* gpgpu_ptx_sim_convert_ptx_and_sass_to_ptxplus(const char *ptxfilename, const char *elffilename, const char *sassfilename)
+{
+
+ printf("GPGPU-Sim PTX: converting EMBEDDED .ptx file to ptxplus \n");
+
+/*
+ // Extract ptx to a file
+ char fname_ptx[1024];
+ snprintf(fname_ptx,1024,"_ptx_XXXXXX");
+ int fd1=mkstemp(fname_ptx);
+ close(fd1);
+
+ printf("GPGPU-Sim PTX: extracting embedded .ptx to temporary file \"%s\"\n", fname_ptx);
+ FILE *ptxfile = fopen(fname_ptx,"w");
+ fprintf(ptxfile,"%s",ptx_str);
+ fclose(ptxfile);
+
+ char fname_sass[1024];
+ snprintf(fname_sass,1024,"_sass_XXXXXX");
+ int fd2=mkstemp(fname_sass);
+ close(fd2);
+
+ printf("GPGPU-Sim PTX: extracting .sass to temporary file \"%s\"\n", fname_sass);
+ FILE *sassfile = fopen(fname_sass,"w");
+ fprintf(sassfile,"%s",sass_str);
+ fclose(sassfile);
+
+ char fname_elf[1024];
+ snprintf(fname_elf,1024,"_elf_XXXXXX");
+ int fd3=mkstemp(fname_elf);
+ close(fd3);
+
+ printf("GPGPU-Sim PTX: extracting .elf to temporary file \"%s\"\n", fname_elf);
+ FILE *elffile = fopen(fname_elf,"w");
+ fprintf(elffile,"%s",elf_str);
+ fclose(elffile);
+*/
+ char fname_ptxplus[1024];
+ snprintf(fname_ptxplus,1024,"_ptxplus_XXXXXX");
+ int fd4=mkstemp(fname_ptxplus);
+ close(fd4);
+
+ // Extract cubin to a file
+ char fname_decuda[1024];
+ char fname_cubin[1024];
+
+
+ // Run cuobjdump_to_ptxplus
+ char commandline[1024];
+ int result;
+ snprintf(commandline, 1024, "$GPGPUSIM_ROOT/cuobjdump_to_ptxplus/cuobjdump_to_ptxplus %s %s %s %s", ptxfilename, sassfilename, elffilename, fname_ptxplus);
+ fflush(stdout);
+ printf("GPGPU-Sim PTX: calling cuobjdump_to_ptxplus\ncommandline: %s\n", commandline);
+ result = system(commandline);
+ if(result){printf("GPGPU-Sim PTX: ERROR ** could not execute %s\n", commandline); exit(1);}
+
+
+ // Get ptxplus from file
+ std::ifstream fileStream(fname_ptxplus, std::ios::in);
+ std::string text, line;
+ while(getline(fileStream,line)) {
+ text += (line + "\n");
+ }
+ fileStream.close();
+
+ char* ptxplus_str = new char [strlen(text.c_str())+1];
+ strcpy(ptxplus_str, text.c_str());
+
+ // Remove temporary files
+ /*
+ char rm_commandline[1024];
+
+ snprintf(rm_commandline,1024,"rm -f %s", fname_ptxplus);
+
+ printf("GPGPU-Sim PTX: removing temporary files using \"%s\"\n", rm_commandline);
+ int rm_result = system(rm_commandline);
+ if( rm_result != 0 ) {
+ printf("GPGPU-Sim PTX: ERROR ** while removing temporary files %d\n", rm_result);
+ exit(1);
+ }
+ */
+ printf("GPGPU-Sim PTX: DONE converting EMBEDDED .ptx file to ptxplus \n");
+
+ return ptxplus_str;
+}
+
symbol_table *gpgpu_ptx_sim_load_ptx_from_string( const char *p, unsigned source_num )
{
@@ -237,6 +341,7 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
close(fd);
char commandline2[4096];
snprintf(commandline2,4096,"cat %s | sed 's/.version 1.5/.version 1.4/' | sed 's/, texmode_independent//' | sed 's/\\(\\.extern \\.const\\[1\\] .b8 \\w\\+\\)\\[\\]/\\1\\[1\\]/' | sed 's/const\\[.\\]/const\\[0\\]/g' > %s", fname, fname2);
+ printf("Running: %s\n", commandline2);
int result = system(commandline2);
if( result != 0 ) {
printf("GPGPU-Sim PTX: ERROR ** while loading PTX (a) %d\n", result);
@@ -252,10 +357,10 @@ void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num
extra_flags[0]=0;
#if CUDART_VERSION >= 3000
- snprintf(extra_flags,1024,"--gpu-name=sm_20");
+ snprintf(extra_flags,1024,"--gpu-name=sm_13");
#endif
- snprintf(commandline,1024,"ptxas %s -v %s --output-file /dev/null 2> %s",
+ snprintf(commandline,1024,"ptxas %s -v %s --output-file /dev/null 2> %s",
extra_flags, fname2, tempfile_ptxinfo);
printf("GPGPU-Sim PTX: generating ptxinfo using \"%s\"\n", commandline);
result = system(commandline);
diff --git a/src/cuda-sim/ptx_loader.h b/src/cuda-sim/ptx_loader.h
index 0266755..aa98a91 100644
--- a/src/cuda-sim/ptx_loader.h
+++ b/src/cuda-sim/ptx_loader.h
@@ -32,6 +32,7 @@ extern bool g_override_embedded_ptx;
class symbol_table *gpgpu_ptx_sim_load_ptx_from_string( const char *p, unsigned source_num );
void gpgpu_ptxinfo_load_from_string( const char *p_for_info, unsigned source_num );
-char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubin_str, unsigned source_num, bool save_converted );
+char* gpgpu_ptx_sim_convert_ptx_to_ptxplus(const char *ptx_str, const char *cubin_str, unsigned source_num, bool save_converted, bool cuobjdump );
+char* gpgpu_ptx_sim_convert_ptx_and_sass_to_ptxplus(const char *ptx_str, const char *sass_str, const char *elf_str);
#endif
diff --git a/src/cuda-sim/ptx_parser.cc b/src/cuda-sim/ptx_parser.cc
index 3db984d..308405a 100644
--- a/src/cuda-sim/ptx_parser.cc
+++ b/src/cuda-sim/ptx_parser.cc
@@ -43,6 +43,7 @@ const char *g_filename;
unsigned g_max_regs_per_thread = 0;
// the program intermediate representation...
+static symbol_table *g_global_allfiles_symbol_table = NULL;
static symbol_table *g_global_symbol_table = NULL;
std::map<std::string,symbol_table*> g_sym_name_to_symbol_table;
static symbol_table *g_current_symbol_table = NULL;
@@ -105,7 +106,13 @@ void read_parser_environment_variables()
symbol_table *init_parser( const char *ptx_filename )
{
g_filename = strdup(ptx_filename);
- g_global_symbol_table = g_current_symbol_table = new symbol_table("global",0,NULL);
+ if (g_global_allfiles_symbol_table == NULL) {
+ g_global_allfiles_symbol_table = new symbol_table("global_allfiles", 0, NULL);
+ g_global_symbol_table = g_current_symbol_table = g_global_allfiles_symbol_table;
+ }
+ else {
+ g_global_symbol_table = g_current_symbol_table = new symbol_table("global",0,g_global_allfiles_symbol_table);
+ }
ptx_lineno = 1;
#define DEF(X,Y) g_ptx_token_decode[X] = Y;
@@ -767,7 +774,7 @@ void add_scalar_operand( const char *identifier )
DPRINTF("add_scalar_operand");
const symbol *s = g_current_symbol_table->lookup(identifier);
if ( s == NULL ) {
- if ( g_opcode == BRA_OP || g_opcode == CALLP_OP || g_opcode == BREAKADDR_OP) {
+ if ( g_opcode == BRA_OP || g_opcode == CALLP_OP) {
// forward branch target...
s = g_current_symbol_table->add_variable(identifier,NULL,0,g_filename,ptx_lineno);
} else {