search for: r24

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