<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p>If have filed a bug here:</p>
<p><br>
</p>
<p><a class="OWAAutoLink" id="LPlnk479257" href="https://bugs.llvm.org/show_bug.cgi?id=34143" previewremoved="true">https://bugs.llvm.org/show_bug.cgi?id=34143</a><br>
</p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> cfe-dev <cfe-dev-bounces@lists.llvm.org> on behalf of Dan Walmsley via cfe-dev <cfe-dev@lists.llvm.org><br>
<b>Sent:</b> 10 August 2017 13:41:39<br>
<b>To:</b> cfe-dev@lists.llvm.org; Hans Wennborg<br>
<b>Subject:</b> [cfe-dev] Cortex-M4F Assembly Code Generation Incorrect for float casting, causing HardFaults</font>
<div> </div>
</div>
<div>
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size: 12pt;" dir="ltr">
<p>Basically the following code can repro the issue:</p>
<p><br>
</p>
<p>Compile flags are:</p>
<p><span>Wall -c -fshort-enums -ggdb3 -std=c++14 -fno-rtti -fno-exceptions -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -O1 -target arm-none-eabi -mcpu=cortex-m4 -mthumb
</span></p>
<p><br>
</p>
<p>code to reproduce is:</p>
<p><br>
</p>
<p>```<br>
</p>
<p>template <typename T> inline T Read (uint8_t* data)<br>
{<br>
    auto valuePtr = reinterpret_cast<T*> (data);</p>
<p>    auto value = *valuePtr;</p>
<p>    return value;<br>
}</p>
<p>static float test = 180.0f;</p>
<p>int main (void)<br>
{<br>
    uint8_t* data = new uint8_t[8];</p>
<p>    memcpy (data, &test, sizeof (float));</p>
<p>    auto value = Read<float> (data);</p>
<p><br>
</p>
<p>    memcpy (data + 1, &test, sizeof (float));</p>
<p>    value = Read<float> (data + 1); // hard fault here!</p>
<p>    return value;<br>
}</p>
<p>```</p>
<p><br>
</p>
<p>My diagnosis is that when it dereferences the float pointer it uses the VLDR instruction, <a class="OWAAutoLink" id="LPlnk126221" href="https://developer.arm.com/docs/100069/0607/advanced-simd-instructions-32-bit/vldr" previewremoved="true">https://developer.arm.com/docs/100069/0607/advanced-simd-instructions-32-bit/vldr</a></p>
<p><br>
</p>
<p>This instruction can only be used on word aligned boundaries.</p>
<p><br>
</p>
<p>So It works for first call to my Read method, but the second call which is not aligned, it crashes.</p>
<p><br>
</p>
<p>Not sure who is the right person to fix this.</p>
<p></p>
<p><br>
</p>
<p>I will reply with  a bug, once I manage to login to the bug database.</p>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size: 12pt;" dir="ltr">
Thanks</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size: 12pt;" dir="ltr">
<br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size: 12pt;" dir="ltr">
Dan</div>
<p style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size: 12pt;" dir="ltr">
<br>
</p>
<div style="color: rgb(0, 0, 0); font-family: Calibri,Helvetica,sans-serif,"EmojiFont","Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols; font-size: 12pt;" dir="ltr">
</div>
</div>
</div>
</body>
</html>