From 59c4487dfaf90b92eb9ea96479b9f4a5c517b912 Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Tue, 22 Nov 2011 14:28:11 +0000 Subject: generate thread safe code on 64 bit windows if THREAD64 is defined --- cgawas.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'cgawas.c') diff --git a/cgawas.c b/cgawas.c index 774decc..6d5f6dc 100644 --- a/cgawas.c +++ b/cgawas.c @@ -3372,6 +3372,31 @@ static void w_as_rtsp_instruction (void) w_as_newline(); } +#ifdef THREAD64 +static void w_as_ldtlsp_instruction (struct instruction *instruction) +{ + int reg; + + reg=instruction->instruction_parameters[1].parameter_data.reg.r; + + w_as_opcode ("mov"); + w_as_register_comma (reg); + fprintf (assembly_file,"qword ptr "); + if (instruction->instruction_parameters[0].parameter_data.l->label_number!=0) + w_as_local_label (instruction->instruction_parameters[0].parameter_data.l->label_number); + else + w_as_label (instruction->instruction_parameters[0].parameter_data.l->label_name); + w_as_newline(); + + w_as_opcode ("mov"); + w_as_register_comma (reg); + fprintf (assembly_file,"qword ptr gs:[1480h+"); + w_as_register (reg); + fprintf (assembly_file,"*8]"); + w_as_newline(); +} +#endif + static void w_as_instructions (register struct instruction *instruction) { while (instruction!=NULL){ @@ -3657,6 +3682,11 @@ static void w_as_instructions (register struct instruction *instruction) case IRTSI: w_as_rtsi_instruction (instruction); break; +#ifdef THREAD64 + case ILDTLSP: + w_as_ldtlsp_instruction (instruction); + break; +#endif case IFTST: default: internal_error_in_function ("w_as_instructions"); -- cgit v1.2.3