Displaying 20 results from an estimated 104 matches for "r24".
Did you mean:
24
2019 Mar 07
5
Writing unit tests - how to test re-orderable blocks...
...1)
store i16 43741, i16* getelementptr inbounds ([3 x i16], [3 x i16]* @int.array, i32 0, i64 2)
ret void
}
The issue I have is this test is unnecessarily fragile because the compiler can (and recently has) decided to reorder the blocks in a perfectly valid way. For example:
; %bb.0:
ldi r24, 221
ldi r25, 170
sts int.array+5, r25
sts int.array+4, r24
ldi r24, 204
ldi r25, 170
sts int.array+3, r25
sts int.array+2, r24
ldi r24, 187
ldi r25, 170
sts int.array+1, r25
sts int.array, r24
ret
The three blocks should be independent, it doesn’t matter whether it does the store to...
2010 Dec 01
2
[LLVMdev] Register Pairing
...0:r19 or
r20:r18 would be invalid because the in the first case the low reg is odd
and in the second case regs arent contiguous.
To store data wider than 16 bits, for example for a 32 bit int we would use
2 register pairs (4 8bit regs) but here the pairs dont need to be contiguous
so storing it r25:r24:r19:r18 is completely fine.
As i said in my previous email this is achieved by using HARD_REGNO_MODE_OK
in gcc.
- Second, assuming the previous point works so the register constraints are
done, how would i then proceed and combine two 8 bit instructions into a 16
bit one as Jeff pointed out in his...
2010 Dec 02
0
[LLVMdev] Register Pairing
Hi Borja,
> Without doing what i mentioned and letting LLVM expand all operations wider
> than 8 bits as you asked, the code produced is excellent supposing that many
> of the moves there should be 16 bit moves reducing code size and right
> register allocation, also something important for me is that the code is
> better than gcc's. When i say right reg allocation it doesnt
2010 Dec 05
1
[LLVMdev] Register Pairing
...laining, Lang this example is exactly why i need the
constraints and how to combine instructions.
typedef short t;
extern t mcos(t a);
extern t mdiv(t a, t b);
t foo(t a, t b)
{
short p1 = mcos(b);
short p2 = mcos(a);
return mdiv(p1&p2, p1^p2);
}
This C code produces:
; a<- r25:r24 b<--r23:r22
mov r18, r24
mov r19, r25 <-- can be combined into a movw r19:r18, r25:r24
mov r25, r23
mov r24, r22 <-- can be combined into a movw r25:r24, r23:r22
call mcos
; here we have the case i was explaining, pairs dont match because they're
th...
2019 Mar 08
2
Writing unit tests - how to test re-orderable blocks...
...rray, i32 0, i64 2)
>> ret void
>> }
>>
>>
>>
>> The issue I have is this test is unnecessarily fragile because the compiler can (and recently has) decided to reorder the blocks in a perfectly valid way. For example:
>> ; %bb.0:
>> ldi r24, 221
>> ldi r25, 170
>> sts int.array+5, r25
>> sts int.array+4, r24
>> ldi r24, 204
>> ldi r25, 170
>> sts int.array+3, r25
>> sts int.array+2, r24
>> ldi r24, 18...
2020 Mar 31
3
How to add new AVR targets?
Hi Dylan,
looks ok now.
One thing:
the ISR is now:
__vector_21: ; @__vector_21
__vector_21$local:
sei
push r0
push r1
in r0, 63
push r0
clr r0
push r24
lds r24, v1
sts v2, r24
pop r24
pop r0
out 63, r0
pop r1
pop r0
reti
There are unneccessary push/pops of r1 and r0 too, since the clr is
useless ... GCC had the same problem but they made improvements.
Thanks.
Am 31.03.20 um 08:09 schrieb Wilhelm Meier via llvm-dev:...
2010 Nov 27
3
[LLVMdev] Register Pairing
...ded into 8bit operations the 16bit instructions never get
selected, also the reg allocator should allocate adjacent regs to form the
pairs. The most important 16 bit instruction is data movement, this
instruction can move register pairs in a single cycle, doing something like
this:
mov r25, r23
mov r24, r22
into:
movw r25:r24, r23:r22
The key point here is that the movw instruction can only move data of fixed
pairs in this way. movw Rdest+1:Rdest, Rorig+1:Rorig, so movw R25:R23,
R21:R18 is illegal because registers pairs aren't adjacent.
Explaining this as if it was for x86 may make things m...
2010 Nov 29
0
[LLVMdev] Register Pairing
...u don't have a number of 16-bit instructions.
[...]
> typedef unsigned short t;
> t foo(t a, t b, t c)
> {
> return a+b;
> }
[...]
> This is fine until we get to the register allocation stage, there it does:
> BB#0: derived from LLVM BB %entry
> Live Ins: %R25R24 %R23R22
> %R18<def> = COPY %R24
> %R19<def> = COPY %R25
> %R24<def> = COPY %R22<kill>, %R25R24<imp-def>
> %R24<def> = ADDRdRr %R24, %R18<kill>, %SREG<imp-def>
> %R25<def> = COPY %R23<kill>
> %R25&l...
2020 Mar 28
2
How to add new AVR targets?
Hi Dylan,
the following code
volatile uint8_t v1;
volatile uint8_t v2;
__attribute__((interrupt)) void __vector_21(void) {
v2 = v1;
}
produces in C mode:
00000092 <__vector_21>:
92: 80 91 61 00 lds r24, 0x0061 ; 0x800061 <v1>
96: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <__data_end>
9a: 08 95 ret
and in C++ mode:
00000074 <_Z11__vector_21v>:
74: 80 91 60 00 lds r24, 0x0060 ; 0x800060 <__data_end>
78: 80 93 61 00 sts 0x0...
2020 Apr 08
2
How to add new AVR targets?
....
>>
>> One thing:
>>
>> the ISR is now:
>>
>> __vector_21: ; @__vector_21
>> __vector_21$local:
>> sei
>> push r0
>> push r1
>> in r0, 63
>> push r0
>> clr r0
>> push r24
>> lds r24, v1
>> sts v2, r24
>> pop r24
>> pop r0
>> out 63, r0
>> pop r1
>> pop r0
>> reti
>>
>> There are unneccessary push/pops of r1 and r0 too, since the clr is
>> useless ... GCC had the same proble...
2020 Mar 31
2
How to add new AVR targets?
...> > > __attribute__((interrupt)) void __vector_21(void) {
> > > v2 = v1;
> > > }
> > >
> > > produces in C mode:
> > >
> > > 00000092 <__vector_21>:
> > > 92: 80 91 61 00 lds r24, 0x0061 ; 0x800061 <v1>
> > > 96: 80 93 60 00 sts 0x0060, r24 ; 0x800060
> <__data_end>
> > > 9a: 08 95 ret
> > >
> > > and in C++ mode:
> > >
> > > 00000074 <_Z11__vector_2...
2012 Jan 10
1
[LLVMdev] SelectionDAG
...i8 %a, i8 %b) {
entry:
%c = sub i8 %a, 5
ret i8 %c
}
with `build/Debug/bin/llc -march=avr llvm.ll -o -` and I receive:
.file "test.ll"
.text
.global foo
.type foo, at function
foo: # @foo
# BB#0: # %entry
MOV r22, r24
LDI r24, -5
ADD r24, r18
RET
.tmp0:
.size foo, .tmp0-foo
While I would like the output as such:
.file "test.ll"
.text
.global foo
.type foo, at function
foo: # @foo
# BB#0: # %entry
SUB r24, 5
RET
.tmp0:
.size...
2020 Mar 30
2
How to add new AVR targets?
...> > volatile uint8_t v1;
> > volatile uint8_t v2;
> >
> > __attribute__((interrupt)) void __vector_21(void) {
> > v2 = v1;
> > }
> >
> > produces in C mode:
> >
> > 00000092 <__vector_21>:
> > 92: 80 91 61 00 lds r24, 0x0061 ; 0x800061 <v1>
> > 96: 80 93 60 00 sts 0x0060, r24 ; 0x800060 <__data_end>
> > 9a: 08 95 ret
> >
> > and in C++ mode:
> >
> > 00000074 <_Z11__vector_21v>:
> > 74: 80 91 60 00 lds r24, 0x0060...
2006 Feb 18
1
r24 - trunk/debian/patches
Author: tha-guest
Date: 2006-02-18 22:55:21 +0000 (Sat, 18 Feb 2006)
New Revision: 24
Removed:
trunk/debian/patches/30rename-pae-hypervisor.dpatch
Log:
Guido found a better way to have the pae hypervisor installed with
another name without patching upstream and it seems to work as good
as the patched upstream version, so I removed my patch from svn again.
There seems to be no need to just
2010 Feb 18
2
subset() for multiple values
This code works:
subset(NativeDominant.df,!ID=="37-R17")
This code does not:
Tree.df<-subset(NativeDominant.df,!ID==c("37-R17","37-R18","10-R1","37-R21","37-R24","R7A-R1","3-R1","37-R16"))
how do i get subset() to work on a range of values?
--
View this message in context: http://n4.nabble.com/subset-for-multiple-values-tp1560543p1560543.html
Sent from the R help mailing list archive at Nabble.com.
2010 Nov 03
1
[LLVMdev] LLVM x86 Code Generator discards Instruction-level Parallelism
...he following block 512 times:
.
.
{
p1 = p1 * a;
p2 = p2 * b;
p3 = p3 * c;
p4 = p4 * d;
}
.
.
Compiling with NVCC, Ocelot, and LLVM, I can confirm the interleaved instruction
schedule with a four-instruction reuse distance. An excerpt follows:
.
.
%r1500 = fmul float %r1496, %r24 ; compute %1500
%r1501 = fmul float %r1497, %r23
%r1502 = fmul float %r1498, %r22
%r1503 = fmul float %r1499, %r21
%r1504 = fmul float %r1500, %r24 ; first use of %1500
%r1505 = fmul float %r1501, %r23
%r1506 = fmul float %r1502, %r22
%r1507 = fmul float %r1503, %r21
%r1508 = fm...
2020 Mar 04
2
How to add new AVR targets?
Am 04.03.20 um 13:28 schrieb Dylan McKay:
>
> * *The C/C++ function needs to be declared with either the calling
> convention avr-interrupt or avr-non-blocking-interrupt.* Skipping
> this step will cause regular ret instructions to be emitted for
> return-from-subroutine, instead of the required reti for interrupt
> handlers. ISRs also have stricter
2019 Mar 02
3
Legalising seems to lose critical information needed for lowering return values properly?
...yExternalFunction1(i32, i32)
Is being lowered to this assembly language...
setServoAngle3: ; @setServoAngle3
; %bb.0: ; %entry
ldi r18, 119
ldi r19, 0
ldi r20, 0
ldi r21, 0
call myExternalFunction1
mov r18, r22
mov r19, r23
mov r22, r24
mov r23, r25
mov r24, r18
mov r25, r19
ret
Which is clearly wrong. It should just be...
setServoAngle3: ; @setServoAngle3
; %bb.0: ; %entry
ldi r18, 119
ldi r19, 0
ldi r20, 0
ldi r21, 0
call myExternalFunction1
ret
The AVR ABI is...
2008 Feb 25
6
[PATCH 0/4] ia64/xen: paravirtualization of hand written assembly code
Hi. The patch I send before was too large so that it was dropped from
the maling list. I'm sending again with smaller size.
This patch set is the xen paravirtualization of hand written assenbly
code. And I expect that much clean up is necessary before merge.
We really need the feed back before starting actual clean up as Eddie
already said before.
Eddie discussed how to clean up and suggested
2008 Feb 25
6
[PATCH 0/4] ia64/xen: paravirtualization of hand written assembly code
Hi. The patch I send before was too large so that it was dropped from
the maling list. I'm sending again with smaller size.
This patch set is the xen paravirtualization of hand written assenbly
code. And I expect that much clean up is necessary before merge.
We really need the feed back before starting actual clean up as Eddie
already said before.
Eddie discussed how to clean up and suggested