LOGIN   :::   RECOVER PASS   :::   GET ACCOUNT    
Browse
  • Projects
  • Code (CVS)
  • Forums
  • News
  • Articles
  • Polls
  •  
    OpenCores
  • FAQ
  • CVS HowTo
  • Mission
  • Media
  • Tools
  • Advertise
  • Mirrors
  • Logos
  • Contact us
  • Find Resources
  • Job Opportunity
  •  
    Tools
  • Search
      
  • Download Cores (CVSGet)
  •  
    More
  • Wishbone
  • Perlilog
  • EDA tools
  • OpenTech CD
  •  
    Navigation: All forums > Openrisc > Message List > Message Post

    Message

    Reply | Reply all
    Date Prev | Date Next | Thread Prev | Thread Next Date Index | Thread Index

    From: Balaji V. Iyer<bviyer@n...>
    Date: Wed Dec 12 13:53:15 CET 2007
    Subject: [openrisc] RE: Help with another constraint
    Top
    Hi Revital1,
    Thank you very much for your help. The ISA I am using
    (OpenRISC) does not provide an alternative for moving a constant into
    memory. The only way of doing this is to move the constant into a
    register (which i am doing) and then move that register value into
    memory. So what can I do in that case?

    Thanks,

    Baljai V. Iyer.


    --

    Balaji V. Iyer
    PhD Student,
    Center for Efficient, Scalable and Reliable Computing,
    Department of Electrical and Computer Engineering,
    North Carolina State University.


    -----Original Message-----
    From: Revital1 Eres [mailto:ERES@i...]
    Sent: Wednesday, December 12, 2007 7:14 AM
    To: Balaji V. Iyer
    Cc: gcc@g...; openrisc@o...; 'Rask Ingemann Lambertsen'
    Subject: RE: Help with another constraint

    Hello,

    I think you should add the pair of constraints m and I respectively to
    the description of the instruction in your md file (and a relevant case
    8 to handle such instruction), i.e.:

    (define_insn "movqi"
    - [(set (match_operand:QI 0 "nonimmediate_operand" "=p,q,m,m,p,q,p,q")
    - (match_operand:QI 1 "general_operand"
    "m,m,p,q,p,q,I,I"))]
    + [(set (match_operand:QI 0 "nonimmediate_operand"
    "=p,q,m,m,p,q,p,q,m")
    + (match_operand:QI 1 "general_operand"
    "m,m,p,q,p,q,I,I,I"))]
    ""
    "*
    switch(which_alternative)
    @@ -17,6 +17,8 @@
    case 6:
    case 7:
    return \"l.addi \\t%0,r0,%1\\t # move immediate\";,
    + case 8:
    + return ...;
    default:
    return \"invalid alternative\";
    }

    It seems that the pair m and I is missing (which indicate the memory =
    constant instruction). You could look for which_alternative variable in
    GCC internals for more details on this.

    Revital



     
    Copyright (c) 1999 OPENCORES.ORG. All rights reserved.