Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

msp430 backend: arguments passed in wrong registers #6945

Copy link
Copy link
Open
@llvmbot

Description

@llvmbot
Issue body actions
Bugzilla Link 6573
Version trunk
OS Linux
Attachments Test case, Asm at -O2
Reporter LLVM Bugzilla Contributor
CC @asl,@regehr

Extended Description

Test case:

#include <stdint.h>

int8_t g_8[6][10];

int main(void)
{
int i, j;
for (i = 0; i < 6; i++)
{
for (j = 0; j < 10; j++)
g_8[i][j] = 0x44L;
}
return 0;
}

Description:
In the above code g_8 is an array of 6x10 bytes, which is initialized to 0x44. At -O2 and -O3, this array is initialized using memset().

C interface to memset(): void* memset(void* ptr, int value, size_t num);
Asm interface to memset(): ptr -> reg r15
data -> reg r14
size -> reg r13

Assembly code at -O2 and -O3 for call to memset():

main:
mov.w #​0, r11
.LBB1_1
mov.w r11, r15
add.w #g_8, r15
mov.w #​68, r14
mov.w #​0, r13 /* size expected here, passed 0 /
mov.w #​10, r12 /
Size passed in r12, ignored */
call #memset
add.w #​10, r11
cmp.w #​60, r11
jne .LBB1_1
mov.w #​0, r15

Bug: size argument to memset() should be passed in register r13. Instead it is passed in r12.

I am attaching the asm file at -O2. Below are the cmdline options.

pagariya@aleph:~/randprog-testing/main/tmp$ clang -ccc-host-triple msp430-elf -I/home/pagariya/res-pagariya/llvm-msp430/msp430/include -nostdinc -v -O2 -S test.c
clang version 1.1 (trunk 184)
Target: msp430-elf-
Thread model: posix
"/uusoc/facility/res/embed/users/pagariya/llvm-msp430/bin/clang" -cc1 -triple msp430-elf- -S -disable-free -main-file-name test.c -mrelocation-model static -mdisable-fp-elim -mconstructor-aliases -v -nostdinc -resource-dir /uusoc/facility/res/embed/users/pagariya/llvm-msp430/lib/clang/1.1 -I/home/pagariya/res-pagariya/llvm-msp430/msp430/include -O2 -fmessage-length 102 -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -o test.s -x c test.c
clang -cc1 version 1.1 based upon llvm 2.7svn hosted on i386-pc-linux-gnu
#include "..." search starts here:
#include <...> search starts here:
/home/pagariya/res-pagariya/llvm-msp430/msp430/include
/uusoc/facility/res/embed/users/pagariya/llvm-msp430/lib/clang/1.1/include
End of search list.

pagariya@aleph:~/randprog-testing/main/tmp$ uname -a
Linux aleph 2.6.24-24-generic #​1 SMP Fri Sep 18 16:49:39 UTC 2009 i686 GNU/Linux

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.