int8_t was definitely wrong. What I meant was int16_t, but as Nate says 
an explicit cast might not be necessary at all. If you could please give 
the castless version a try and it works, I'll check that in.

Gabe

nathan binkert wrote:
> I don't think you actually need the explicit (int16_t) cast here.  Not
> a big deal though of course.
>
>   Nate
>
> On Wed, Sep 16, 2009 at 9:22 AM, Vince Weaver <[email protected]> wrote:
>   
>> OK, I think I've fixed this.
>>
>> The key is the line:
>>                code = "int16_t simm8 = (int16_t)((int8_t)imm8);" + code
>> I had to change your patch to have the extra "int8_t" cast, or else
>> it wasn't sign extending the result.
>>
>> Below is the updated patch, which works for my test.
>>
>> Note, scons doesn't seem to see changes to regop.isa, at least on my
>> machine.  I had to manually remove m5.opt to get it to rebuild.
>>
>> Vince
>>
>> diff -r cb4c4b793106 src/arch/x86/isa/microops/regop.isa
>> --- a/src/arch/x86/isa/microops/regop.isa       Tue Sep 15 17:04:59 2009 
>> -0400
>> +++ b/src/arch/x86/isa/microops/regop.isa       Wed Sep 16 12:19:36 2009 
>> -0400
>> @@ -324,11 +324,12 @@
>>                         matcher.sub(src2_name, flag_code),
>>                         matcher.sub(src2_name, cond_check),
>>                         matcher.sub(src2_name, else_code))
>> +                imm_name = "%simm8" % match.group("prefix")
>>                 self.buildCppClasses(name + "i", Name, suffix + "Imm",
>> -                        matcher.sub("imm8", code),
>> -                        matcher.sub("imm8", flag_code),
>> -                        matcher.sub("imm8", cond_check),
>> -                        matcher.sub("imm8", else_code))
>> +                        matcher.sub(imm_name, code),
>> +                        matcher.sub(imm_name, flag_code),
>> +                        matcher.sub(imm_name, cond_check),
>> +                        matcher.sub(imm_name, else_code))
>>                 return
>>
>>             # If there's something optional to do with flags, generate
>> @@ -353,13 +354,16 @@
>>             matcher = re.compile("(?<!\w)spsrc2(?!\w)")
>>             if matcher.search(allCode):
>>                 code = "int64_t spsrc2 = signedPick(SrcReg2, 1, dataSize);" 
>> + code
>> +            matcher = re.compile("(?<!\w)simm8(?!\w)")
>> +            if matcher.search(allCode):
>> +                code = "int16_t simm8 = (int16_t)((int8_t)imm8);" + code
>>
>>             base = "X86ISA::RegOp"
>>
>>             # If imm8 shows up in the code, use the immediate templates, if
>>             # not, hopefully the register ones will be correct.
>>             templates = regTemplates
>> -            matcher = re.compile("(?<!\w)imm8(?!\w)")
>> +            matcher = re.compile("(?<!\w)s?imm8(?!\w)")
>>             if matcher.search(allCode):
>>                 base += "Imm"
>>                 templates = immTemplates
>> _______________________________________________
>> m5-dev mailing list
>> [email protected]
>> http://m5sim.org/mailman/listinfo/m5-dev
>>
>>
>>     
> _______________________________________________
> m5-dev mailing list
> [email protected]
> http://m5sim.org/mailman/listinfo/m5-dev
>   

_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to