<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1871723634;
        mso-list-type:hybrid;
        mso-list-template-ids:1287563104 -610341648 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:22.5pt;
        text-indent:-18.0pt;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:58.5pt;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:94.5pt;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:130.5pt;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:166.5pt;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:202.5pt;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:238.5pt;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:274.5pt;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:310.5pt;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Hi Jim,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks for your patience on this.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I’ve gone back and taken another look at this, and I believe you’re totally right. GCC will invisibly promote whatever you give it to 64-bits and emit an X-reg
 instruction. I agree that we want a warning here.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">However, I think the warning as it was pre-r206963 could be confusing for the user. It is not immediately obvious, for example when using the integer literal
 “0”, what the user has done wrong (here, they’d need “0L”). So the attached patch:<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span style="font-size:11.0pt;font-family:Symbol;color:#1F497D"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Reverts the main functionality change of r206963 (w.r.t modifiers).<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span style="font-size:11.0pt;font-family:Symbol;color:#1F497D"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Modifies TargetInfo to allow the modifier validation hook to inform Sema about a fixit hint to insert.<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left:22.5pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1">
<![if !supportLists]><span style="font-size:11.0pt;font-family:Symbol;color:#1F497D"><span style="mso-list:Ignore">·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><![endif]><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Implements this in AArch64TargetInfo to display a fixit.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">The fixit will be a cast of the asm operand to the appropriate type. I’m not thoroughly happy with the changes to TargetInfo – it’s quite restrictive to only
 communicate via a std::string (type to fixit-cast to). However, TargetInfo is in Basic and so can’t access clang::Type
</span><span style="font-size:11.0pt;font-family:Wingdings;color:#1F497D">L</span><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Suggestions to better approaches would be appreciated!<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Cheers,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">James<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> Jim Grosbach [mailto:grosbach@apple.com]
<br>
<b>Sent:</b> 18 July 2014 21:16<br>
<b>To:</b> James Molloy<br>
<b>Cc:</b> cfe-commits@cs.uiuc.edu<br>
<b>Subject:</b> Re: r206963 - [ARM64] Change inline assembly constraints to be more lax, to match the behaviour of Clang/AArch64 and GCC.<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hi James,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">That’s perfectly fine. It’s important to get resolved, but not super urgent.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">  Jim<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On Jul 18, 2014, at 1:00 PM, James Molloy <<a href="mailto:james.molloy@arm.com">james.molloy@arm.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Hi Jim,<br>
<br>
Understood - I'm on vacation until Tuesday, and I'll need to have a chat with others about the right way forward here. Is delaying this until Tuesday OK with you?<br>
<br>
Cheers,<br>
James<o:p></o:p></span></p>
</div>
</div>
<div>
<div class="MsoNormal" align="center" style="text-align:center"><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif"">
<hr size="2" width="100%" align="center">
</span></div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">From:<span class="apple-converted-space"> </span></span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><a href="mailto:grosbach@apple.com">Jim
 Grosbach</a></span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif""><br>
</span><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Sent:<span class="apple-converted-space"> </span></span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">‎18/‎07/‎2014 19:57</span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif""><br>
</span><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">To:<span class="apple-converted-space"> </span></span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><a href="mailto:James.Molloy@arm.com">James Molloy</a></span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif""><br>
</span><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Cc:<span class="apple-converted-space"> </span></span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif""><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a></span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif""><br>
</span><b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Subject:<span class="apple-converted-space"> </span></span></b><span style="font-size:11.0pt;font-family:"Calibri","sans-serif"">Re: r206963 - [ARM64] Change inline assembly constraints
 to be more lax, to match the behaviour of Clang/AArch64 and GCC.</span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif""><o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"Helvetica","sans-serif"">Hi James,<br>
<br>
I’d like to revisit this. There were objections raised when this first went in that were never resolved. This warning was added because it actively found bugs, not for a theoretical concern. The lack of this error is now actively causing problems. I would very
 much like to see this reverted entirely. At the very least, please re-implement this and keep the old behavior, including the diagnostic, for Darwin. If other platforms want to be more flexible and allow potentially broken code to go through undiagnosed, on
 their own heads be it.<br>
<br>
-Jim<br>
<br>
> On Apr 23, 2014, at 3:26 AM, James Molloy <<a href="mailto:james.molloy@arm.com">james.molloy@arm.com</a>> wrote:<br>
> <br>
> Author: jamesm<br>
> Date: Wed Apr 23 05:26:19 2014<br>
> New Revision: 206963<br>
> <br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=206963&view=rev">http://llvm.org/viewvc/llvm-project?rev=206963&view=rev</a><br>
> Log:<br>
> [ARM64] Change inline assembly constraints to be more lax, to match the behaviour of Clang/AArch64 and GCC.<br>
> <br>
> GCC allows sub-64bit values to use the 'r' register constraint.<br>
> <br>
> Modified:<br>
>    cfe/trunk/lib/Basic/Targets.cpp<br>
>    cfe/trunk/test/CodeGen/aarch64-inline-asm.c<br>
>    cfe/trunk/test/Sema/arm64-inline-asm.c<br>
>    cfe/trunk/test/Sema/inline-asm-validate.c<br>
> <br>
> Modified: cfe/trunk/lib/Basic/Targets.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=206963&r1=206962&r2=206963&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=206963&r1=206962&r2=206963&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Basic/Targets.cpp (original)<br>
> +++ cfe/trunk/lib/Basic/Targets.cpp Wed Apr 23 05:26:19 2014<br>
> @@ -4643,46 +4643,37 @@ public:<br>
>     case 'w': // Floating point and SIMD registers (V0-V31)<br>
>       Info.setAllowsRegister();<br>
>       return true;<br>
> +    case 'I': // Constant that can be used with an ADD instruction<br>
> +    case 'J': // Constant that can be used with a SUB instruction<br>
> +    case 'K': // Constant that can be used with a 32-bit logical instruction<br>
> +    case 'L': // Constant that can be used with a 64-bit logical instruction<br>
> +    case 'M': // Constant that can be used as a 32-bit MOV immediate<br>
> +    case 'N': // Constant that can be used as a 64-bit MOV immediate<br>
> +    case 'Y': // Floating point constant zero<br>
> +    case 'Z': // Integer constant zero<br>
> +      return true;<br>
> +    case 'Q': // A memory reference with base register and no offset<br>
> +      Info.setAllowsMemory();<br>
> +      return true;<br>
> +    case 'S': // A symbolic address<br>
> +      Info.setAllowsRegister();<br>
> +      return true;<br>
> +    case 'U':<br>
> +      // Ump: A memory address suitable for ldp/stp in SI, DI, SF and DF modes, whatever they may be<br>
> +      // Utf: A memory address suitable for ldp/stp in TF mode, whatever it may be<br>
> +      // Usa: An absolute symbolic address<br>
> +      // Ush: The high part (bits 32:12) of a pc-relative symbolic address<br>
> +      llvm_unreachable("FIXME: Unimplemented support for bizarre constraints");<br>
>     case 'z': // Zero register, wzr or xzr<br>
>       Info.setAllowsRegister();<br>
>       return true;<br>
>     case 'x': // Floating point and SIMD registers (V0-V15)<br>
>       Info.setAllowsRegister();<br>
>       return true;<br>
> -    case 'Q': // A memory address that is a single base register.<br>
> -      Info.setAllowsMemory();<br>
> -      return true;<br>
>     }<br>
>     return false;<br>
>   }<br>
> <br>
> -  virtual bool validateConstraintModifier(StringRef Constraint,<br>
> -                                          const char Modifier,<br>
> -                                          unsigned Size) const {<br>
> -    // Strip off constraint modifiers.<br>
> -    while (Constraint[0] == '=' || Constraint[0] == '+' || Constraint[0] == '&')<br>
> -      Constraint = Constraint.substr(1);<br>
> -<br>
> -    switch (Constraint[0]) {<br>
> -    default:<br>
> -      return true;<br>
> -    case 'z':<br>
> -    case 'r': {<br>
> -      switch (Modifier) {<br>
> -      case 'x':<br>
> -      case 'w':<br>
> -        // For now assume that the person knows what they're<br>
> -        // doing with the modifier.<br>
> -        return true;<br>
> -      default:<br>
> -        // By default an 'r' constraint will be in the 'x'<br>
> -        // registers.<br>
> -        return (Size == 64);<br>
> -      }<br>
> -    }<br>
> -    }<br>
> -  }<br>
> -<br>
>   virtual const char *getClobbers() const { return ""; }<br>
> <br>
>   int getEHDataRegisterNumber(unsigned RegNo) const {<br>
> <br>
> Modified: cfe/trunk/test/CodeGen/aarch64-inline-asm.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-inline-asm.c?rev=206963&r1=206962&r2=206963&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-inline-asm.c?rev=206963&r1=206962&r2=206963&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/CodeGen/aarch64-inline-asm.c (original)<br>
> +++ cfe/trunk/test/CodeGen/aarch64-inline-asm.c Wed Apr 23 05:26:19 2014<br>
> @@ -1,4 +1,5 @@<br>
> // RUN: %clang_cc1 -triple aarch64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s<br>
> +// RUN: %clang_cc1 -triple arm64-none-linux-gnu -emit-llvm -o - %s | FileCheck %s<br>
> <br>
> // The only part clang really deals with is the lvalue/rvalue<br>
> // distinction on constraints. It's sufficient to emit llvm and make<br>
> <br>
> Modified: cfe/trunk/test/Sema/arm64-inline-asm.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/arm64-inline-asm.c?rev=206963&r1=206962&r2=206963&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/arm64-inline-asm.c?rev=206963&r1=206962&r2=206963&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Sema/arm64-inline-asm.c (original)<br>
> +++ cfe/trunk/test/Sema/arm64-inline-asm.c Wed Apr 23 05:26:19 2014<br>
> @@ -1,8 +1,9 @@<br>
> // RUN: %clang_cc1 -triple arm64-apple-ios7.1 -fsyntax-only -verify %s<br>
> +// expected-no-diagnostics<br>
> +<br>
> void foo() {<br>
>   asm volatile("USE(%0)" :: "z"(0LL));<br>
>   asm volatile("USE(%x0)" :: "z"(0LL));<br>
>   asm volatile("USE(%w0)" :: "z"(0));<br>
> <br>
> -  asm volatile("USE(%0)" :: "z"(0)); // expected-warning {{value size does not match register size specified by the constraint and modifier}}<br>
> }<br>
> <br>
> Modified: cfe/trunk/test/Sema/inline-asm-validate.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/inline-asm-validate.c?rev=206963&r1=206962&r2=206963&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/inline-asm-validate.c?rev=206963&r1=206962&r2=206963&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Sema/inline-asm-validate.c (original)<br>
> +++ cfe/trunk/test/Sema/inline-asm-validate.c Wed Apr 23 05:26:19 2014<br>
> @@ -1,8 +1,9 @@<br>
> // RUN: %clang_cc1 -triple arm64-apple-macosx10.8.0 -fsyntax-only -verify %s<br>
> +// expected-no-diagnostics<br>
> <br>
> unsigned t, r, *p;<br>
> <br>
> int foo (void) {<br>
> -  __asm__ __volatile__( "stxr   %w[_t], %[_r], [%[_p]]" : [_t] "=&r" (t) : [_p] "p" (p), [_r] "r" (r) : "memory"); // expected-warning {{value size does not match register size specified by the constraint and modifier}}<br>
> +  __asm__ __volatile__( "stxr   %w[_t], %[_r], [%[_p]]" : [_t] "=&r" (t) : [_p] "p" (p), [_r] "r" (r) : "memory");<br>
>   return 1;<br>
> }<br>
> <br>
> <br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br>
<br>
</span><span style="font-size:9.0pt;font-family:"Helvetica","sans-serif""><br>
</span><span style="font-size:10.0pt;font-family:"Arial","sans-serif"">-- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately
 and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.<br>
<br>
ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2557590<br>
ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2548782<br>
<br>
</span><o:p></o:p></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<br>
<font face="Arial" color="Black" size="2">-- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents
 to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.<br>
<br>
ARM Limited, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2557590<br>
ARM Holdings plc, Registered office 110 Fulbourn Road, Cambridge CB1 9NJ, Registered in England & Wales, Company No: 2548782<br>
</font>
</body>
</html>