[LLVMdev] TSFlags
Sky Flyer
skylake007 at googlemail.com
Tue Jul 14 06:49:15 PDT 2015
Dear Krzysztof,
That was really much of help. I did go through the ARM code trying to
understand it.
One question that I have is, how "s" and "p" get initialized? for example
in this code that I copied from ARMInstrFormats.td
// Same as I except it can optionally modify CPSR. Note it's modeled as an
input
// operand since by default it's a zero register. It will become an
implicit def
// once it's "flipped".
class sI<dag oops, dag iops, AddrMode am, int sz,
IndexMode im, Format f, InstrItinClass
itin,
string opc, string asm, string
cstr,
list<dag> pattern>
: InstARM<am, sz, im, f, GenericDomain, cstr, itin>
{
bits<4> p; // Predicate operand
bits<1> s; // condition-code set flag ('1' if the insn should set the
flags)
let Inst{31-28} =
p;
let Inst{20} =
s;
let OutOperandList = oops;
let InOperandList = !con(iops, (ins pred:$p,
cc_out:$s));
let AsmString = !strconcat(opc, "${s}${p}",
asm);
let Pattern = pattern;
list<Predicate> Predicates =
[IsARM];
}
The same for TSFlags; when I want to used them for condition handling, how
do they get initialized?
On Fri, Jul 10, 2015 at 5:59 PM, Krzysztof Parzyszek <
kparzysz at codeaurora.org> wrote:
> On 7/10/2015 10:23 AM, Sky Flyer wrote:
>
>> Many thanks for your prompt reply.
>>
>> I mean, imagine you have 3 bits for condition flags in your instruction
>> (e.g. overflow, zero, carry set, ...) for conditional executions AND
>> there is no direct access to the Status Register, is it even possible to
>> implement such scenario?
>>
>>
> There doesn't have to be any explicit status register. You can either
> create separate instructions for each condition, or have the condition as
> an extra operand. Let's take "add" for example. You could have several
> versions of add:
> add add unconditionally
> addc add if carry
> addz add if zero
> addo add if overflow
> and similarly for more complex conditions that your target could support,
> such as "carry or zero". This has the disadvantage that the instruction
> set can get really large, but if the number of conditional instructions is
> small or if the possible conditions vary from one operation to another,
> this may be a viable solution.
> The other option is to model the condition as an operand (I think ARM does
> that). So the add instruction could look like this:
> R0 = add R1, R2, C
> where
> C = 0: no conditions
> C = 1: zero
> C = 2: carry
> C = 4: overflow
> etc.
>
> This way the instruction set would remain small, but it may involve
> special handling for it to work with the integrated assembler (if the
> native instruction format is different than what you chose).
>
> You could use the TSFlags to indicate for each instruction which condition
> this instruction can modify. Taking the add again, it could modify all of
> the three: zero, carry and overflow, but a load could only modify zero (for
> example, specifics would depend on your target).
>
>
>
> -Krzysztof
>
>
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted
> by The Linux Foundation
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150714/c8999f60/attachment.html>
More information about the llvm-dev
mailing list