Hi Gabe,

One additional question, regarding another instruction I was trying to 
implement (FCMOVNBE).
I thought of emulating a sequence similar what we have for CMOVNBE.
def macroop CMOVNBE_R_R                  

{                                        

    mov reg, reg, reg, flags=(CCvZF,)    

    mov reg, reg, regm, flags=(nCCvZF,)  

};                                       

                                         

def macroop CMOVNBE_R_M                  

{                                        

    ld t1, seg, sib, disp                 

    mov reg, reg, reg, flags=(CCvZF,)    

    mov reg, reg, t1, flags=(nCCvZF,)    

};                                       

                                         

def macroop CMOVNBE_R_P                  

{                                        

    rdip t7                              

    ld t1, seg, riprel, disp             

    mov reg, reg, reg, flags=(CCvZF,)    

    mov reg, reg, t1, flags=(nCCvZF,)     

};

However, I think this implementation is made easier because of the usage of the 
mov microop which seems to be a condRegOp. However movfp being a FPUnaryOp, I 
assume I can’t translate a similar sequence using movfp for FCMOVNBE. Is there 
an alternate microop I can make use of, or should I implement a microop or is 
there an alternate workaround?


Thanks,
Shyam
> On Apr 13, 2019, at 6:57 PM, Shyam Murthy <[email protected]> wrote:
> 
> Hi Gabe,
> 
> Thanks for the help with the FRNDINT instruction. 
> I was trying to implement another instruction, namely FISTP. This was my 
> initial implementation 
> def macroop FISTP {
>     cvtf_d2i t1, st(0)
>     movfp st(0), t1
>     pop87
> };
> But I think the instruction writes to a destination, I was unsure how to 
> specify the same. (which I will have to specify in place of highlighted st(0) 
> here) 
> Is this approach correct for this instruction, because I thought it was 
> similar to FRNDINT otherwise, with the addition of extra POP instruction to 
> pop st(0)?
> 
> Thanks,
> Shyam
> 
> 
> On Sun, Apr 7, 2019 at 2:23 AM Gabe Black <[email protected] 
> <mailto:[email protected]>> wrote:
> Hy Shyam. That microop takes a floating point register as it's source and an 
> integer register as its destination. You're passing in two floating point 
> indexes which won't work. To avoid implementing a new microop (too many 
> microops is probably not realistic), you could use the mov2fp microop to move 
> the newly converted value in an integer microcode only register (like t1, for 
> instance) back into an FP register like st(0).
> 
> Gabe
> 
> On Fri, Apr 5, 2019 at 6:53 PM Shyam Murthy <[email protected] 
> <mailto:[email protected]>> wrote:
> Hi Gabe,
> 
> I wrote this implementation for the frndint macroop:
> def macroop FRNDINT {
>     cvtf_d2i st(0), st(0)
> };
> 
> However, when I run the application using this instruction on gem5, I seem to 
> get this error: gem5.opt: build/X86/cpu/simple_thread.hh:251: RegVal 
> SimpleThread::readIntReg(int): Assertion `flatIndex < TheISA::NumIntRegs' 
> failed.
> I just wanted to know what I was missing in my implementation for FRNDINT 
> macroop?
> 
> Thanks,
> Shyam 
> 
> 
> On Sun, Mar 31, 2019 at 4:09 PM Shyam Murthy <[email protected] 
> <mailto:[email protected]>> wrote:
> Thanks a lot for the clarification Gabe. 
> 
> Thanks,
> Shyam 
> 
> On Sun, Mar 31, 2019 at 6:29 AM Gabe Black <[email protected] 
> <mailto:[email protected]>> wrote:
> Hi Shyam. There are float to integer and integer to float conversion microops 
> in src/arch/x86/isa/microops/fpop.isa which start with cvt_* which is short 
> for convert. You can definitely implement new instructions and submit the 
> code for review. There are instructions in the CONTRIBUTING.md file in the 
> root of the gem5 source tree.
> 
> Gabe
> 
> On Fri, Mar 29, 2019 at 4:21 PM Shyam Murthy <[email protected] 
> <mailto:[email protected]>> wrote:
> Apologize for the wrong title in my previous email. Correcting.
> 
> Thanks,
> Shyam 
> 
> On Fri, Mar 29, 2019 at 6:16 PM Shyam Murthy <[email protected] 
> <mailto:[email protected]>> wrote:
> Hi Gabe,
> 
> As I am trying to run SPEC 2017 on gem5 in SE mode, I ran into some 
> unimplemented instructions namely frndint, fsqrt and fistp to name a few. I 
> see that within the src/arch/x86/isa/insts/x87/arithmetic folder, there are 
> placeholder files to write implementations for some of the macro operations, 
> like square root and rounding. Can I write my implementations and have my 
> code reviewed, so that it can be checked in?
> In addition, for float to integer operation, I did not find any corresponding 
> micro-op in the folder src/arch/x86/isa/microops, is there already a 
> corresponding micro-op (that I missed), or should I write my own? 
> 
> Thanks,
> Shyam 

_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to