comp.lang.ada
 help / color / mirror / Atom feed
From: anon@att.net
Subject: Re: Code Statement
Date: Wed, 19 May 2010 04:37:19 +0000 (UTC)
Date: 2010-05-19T04:37:19+00:00	[thread overview]
Message-ID: <hsvptt$n36$1@speranza.aioe.org> (raw)
In-Reply-To: 8242a424-5b09-4444-a3ed-7b45e159c46a@z17g2000vbd.googlegroups.com

In <8242a424-5b09-4444-a3ed-7b45e159c46a@z17g2000vbd.googlegroups.com>, sjw <simon.j.wright@mac.com> writes:
>On May 18, 2:12=A0pm, johnj...@cox.net wrote:
>> Trying to use the "Code Statement" for a special project, by passing the
>> ASM proc/func. So, can Gnat process a true "Code Statement" statement?
>>
>> When I compile the following example using>gnat make temp.adb -gnatpg
>>
>> gcc -c -gnatpg temp.adb
>> temp.adb:10:07: incorrect type for code statement
>> gnatmake: "temp.adb" compilation error
>>
>> Source code:
>>
>> =A0 =A0package Machine_Code is
>>
>> =A0 =A0 =A0 =A0type Asm_Insn is new Integer; =A0-- =A0type required by ga=
>nt
>>
>> =A0 =A0 =A0 =A0x86_NOP =A0 =A0: constant Asm_Insn :=3D 16#90#;
>>
>> =A0 =A0 =A0 =A0type M_Code_0 =A0is record
>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Opcode : Asm_Insn;
>> =A0 =A0 =A0 =A0end record;
>> =A0 =A0 =A0 =A0pragma Pack (M_Code_0);
>> =A0 =A0end Machine_Code;
>>
>> Source code:
>>
>> =A0 =A0with Machine_Code;
>>
>> =A0 =A0procedure temp is
>>
>> =A0 =A0 =A0 =A0procedure Test;
>>
>> =A0 =A0 =A0 =A0procedure Test is
>> =A0 =A0 =A0 =A0 =A0 use Machine_Code;
>> =A0 =A0 =A0 =A0begin
>> =A0 =A0 =A0 =A0 =A0 M_Code_0'(Opcode =3D> x86_NOP); =A0-- line 10
>> =A0 =A0 =A0 =A0end Test;
>>
>> =A0 =A0begin
>> =A0 =A0 =A0 null;
>> =A0 =A0end temp;
>
>See
>http://booch95.svn.sourceforge.net/viewvc/booch95/trunk/src/bc-support-high=
>_resolution_time-clock.adb-pentium?revision=3D1415&view=3Dmarkup
>for a working i586/x86_64 example.
>
>Best not to use -gnatpg: -gnatp says 'suppress all checks', -gnatg
>says 'GNAT implementation mode (used for compiling GNAT units)' -- I'm
>pretty sure that that mode is like -Werror.




As for the example supplied I decide use the intel "nop" for simplicity
instead of using the codes for the attached processor.

I prefer to use the Code Statement like the System.Machine_Code in SUN, 
instead of using the inline-assembler of gnat\gcc. which forces the 
following type of statements for non-native processors:

    ASM ( " .byte 0x90" ) ; -- intel x86 nop
    ASM ( " .byte 0x02" ) ; -- attach processor instruction "Load R2"
    ...

And using the code statement allows the Ada compiler to emulate a small 
limited assembler without all of the work\time in rewriting\expanding 
the gcc "AS" to include the new processor.

So, I see no problem in using code statement except for creating or 
expand and recompiling the "system.machine_code" package. Unless Adacore 
has crippled gnat's code statement routines.

Now, the RM 13.8 (2), says that the code statement is qualified_expression 
so what the problem.  In Gnat, the ASM routines are handled by the 
"Expand_Asm_Call" procedure ("exp_code" package) which expands the ASM 
statement into a qualified_expression.  Also, "P_Code_Statement" ("par-ch13" 
package) directly processes code_statements as an qualified_expression.  
Afterwards, the "Analyze_Code_Statement" ("sem-ch13" package)  analyzes 
should handle the code statements but this routine is where the error 
message is generated.

Used "-gnatpg" since machine_code is a gnat system package.



  reply	other threads:[~2010-05-19  4:37 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-18 13:12 Code Statement johnjohn
2010-05-18 13:22 ` Ludovic Brenta
2010-05-18 13:29 ` AdaMagica
2010-05-18 15:05 ` sjw
2010-05-19  4:37   ` anon [this message]
2010-05-19  6:07     ` Simon Wright
2010-05-19  9:56       ` sjw
2010-05-19 10:20         ` AdaMagica
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox