<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)">
<style><!--
/* Font Definitions */
@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;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></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:&quot;Calibri&quot;,&quot;sans-serif&quot;">There's only been one commit to llvmlinux since I created the patch and it was committing part of my patch. Just to double check, are you applying the patch to llvmlinux
 or are you taking the patch and placing it in the patches directory of llvmlinux? The former is the intention.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;"><o:p>&nbsp;</o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<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:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> Mark Charlebois [mailto:charlebm@gmail.com]
<br>
<b>Sent:</b> 09 January 2015 17:58<br>
<b>To:</b> Daniel Sanders<br>
<b>Cc:</b> Compiling the Linux Kernel with Clang/LLVM<br>
<b>Subject:</b> Re: [llvmlinux] [PATCH 1/2] [mips] Replace named register fix with an upstreamable version.<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<p class="MsoNormal">The patch you sent does not apply to the current tree. I do not understand what you want to be done.<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
<div>
<p class="MsoNormal">-Mark<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<p class="MsoNormal">On Fri, Jan 9, 2015 at 6:20 AM, Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com" target="_blank">daniel.sanders@imgtec.com</a>&gt; wrote:<o:p></o:p></p>
<p class="MsoNormal">Also include the necessary LLVM patch which was previously omitted.<br>
<br>
---<br>
<br>
I've submitted the kernel patch upstream.<br>
<br>
&nbsp;...REAM-mips-Remove-all-instances-of-explici.patch | 426 ---------------------<br>
&nbsp;...-current_thread_info-to-an-equivalent-sup.patch |&nbsp; 50 &#43;&#43;&#43;<br>
&nbsp;arch/mips/patches/series&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp;3 &#43;-<br>
&nbsp;.../clang/patches/llvm/mips-named-registers.patch&nbsp; |&nbsp; 39 &#43;&#43;<br>
&nbsp;toolchain/clang/patches/llvm/series&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp;1 &#43;<br>
&nbsp;5 files changed, 91 insertions(&#43;), 428 deletions(-)<br>
&nbsp;delete mode 100644 arch/mips/patches/mips-DO-NOT-UPSTREAM-mips-Remove-all-instances-of-explici.patch<br>
&nbsp;create mode 100644 arch/mips/patches/mips-change-current_thread_info-to-an-equivalent-sup.patch<br>
&nbsp;create mode 100644 toolchain/clang/patches/llvm/mips-named-registers.patch<br>
<br>
diff --git a/arch/mips/patches/mips-DO-NOT-UPSTREAM-mips-Remove-all-instances-of-explici.patch b/arch/mips/patches/mips-DO-NOT-UPSTREAM-mips-Remove-all-instances-of-explici.patch<br>
deleted file mode 100644<br>
index c661a8a..0000000<br>
--- a/arch/mips/patches/mips-DO-NOT-UPSTREAM-mips-Remove-all-instances-of-explici.patch<br>
&#43;&#43;&#43; /dev/null<br>
@@ -1,426 &#43;0,0 @@<br>
-From f7d74e066df8cd92e5c310d2354e84e5e26c2dff Mon Sep 17 00:00:00 2001<br>
-From: Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com">daniel.sanders@imgtec.com</a>&gt;<br>
-Date: Fri, 19 Dec 2014 13:48:39 &#43;0000<br>
-Subject: [PATCH 2/2] [DO-NOT-UPSTREAM][mips] Remove all instances of explicit<br>
- register variables from the mips arch.<br>
-<br>
-Clang accepts the syntax but does not honour them. I've asked a colleague to<br>
-look into supporting explicit register variables in clang. For now, remove the<br>
-uses of this feature and accept the unnecessary moves.<br>
-<br>
-Signed-off-by: Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com">daniel.sanders@imgtec.com</a>&gt;<br>
----<br>
- .../mips-remove-explicit-register-variables.patch&nbsp; | 391 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;<br>
- arch/mips/patches/series&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp;1 &#43;<br>
- 2 files changed, 392 insertions(&#43;)<br>
- create mode 100644 arch/mips/patches/mips-remove-explicit-register-variables.patch<br>
-<br>
-diff --git a/arch/mips/patches/mips-remove-explicit-register-variables.patch b/arch/mips/patches/mips-remove-explicit-register-variables.patch<br>
-new file mode 100644<br>
-index 0000000..320831a<br>
---- /dev/null<br>
-&#43;&#43;&#43; b/arch/mips/patches/mips-remove-explicit-register-variables.patch<br>
-@@ -0,0 &#43;1,391 @@<br>
-&#43;From 437530253edbf21d60e98259096a532a90579b8d Mon Sep 17 00:00:00 2001<br>
-&#43;From: Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com">daniel.sanders@imgtec.com</a>&gt;<br>
-&#43;Date: Fri, 19 Dec 2014 13:44:48 &#43;0000<br>
-&#43;Subject: [PATCH 2/2] [DO-NOT-UPSTREAM][mips] Remove all instances of explicit<br>
-&#43; register variables from the mips arch.<br>
-&#43;<br>
-&#43;Clang accepts the syntax but does not honour them. I've asked a colleague to<br>
-&#43;look into supporting explicit register variables in clang. For now, remove the<br>
-&#43;uses of this feature and accept the unnecessary moves.<br>
-&#43;<br>
-&#43;Signed-off-by: Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com">daniel.sanders@imgtec.com</a>&gt;<br>
-&#43;---<br>
-&#43; arch/mips/include/asm/kvm_para.h&nbsp; &nbsp; | 34 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;-----<br>
-&#43; arch/mips/include/asm/sgiarcs.h&nbsp; &nbsp; &nbsp;| 42 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;------<br>
-&#43; arch/mips/include/asm/thread_info.h |&nbsp; 4 &#43;-<br>
-&#43; arch/mips/include/asm/uaccess.h&nbsp; &nbsp; &nbsp;| 85 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;---------------<br>
-&#43; arch/mips/lib/uncached.c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; 5 &#43;&#43;-<br>
-&#43; 5 files changed, 108 insertions(&#43;), 62 deletions(-)<br>
-&#43;<br>
-&#43;diff --git a/arch/mips/include/asm/kvm_para.h b/arch/mips/include/asm/kvm_para.h<br>
-&#43;index 5a9aa91..b8e987c 100644<br>
-&#43;--- a/arch/mips/include/asm/kvm_para.h<br>
-&#43;&#43;&#43;&#43; b/arch/mips/include/asm/kvm_para.h<br>
-&#43;@@ -14,12 &#43;14,14 @@<br>
-&#43;&nbsp; */<br>
-&#43; static inline unsigned long kvm_hypercall0(unsigned long num)<br>
-&#43; {<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long n asm(&quot;v0&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long r asm(&quot;v0&quot;);<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long n;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long r;<br>
-&#43;<br>
-&#43;&nbsp; &nbsp; &nbsp; n = num;<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $v0,%1\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KVM_HYPERCALL<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0,$v0\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &quot;=r&quot; (r) : &quot;r&quot; (n) : &quot;memory&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br>
-&#43;<br>
-&#43;@@ -29,14 &#43;31,17 @@ static inline unsigned long kvm_hypercall0(unsigned long num)<br>
-&#43; static inline unsigned long kvm_hypercall1(unsigned long num,<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unsigned long arg0)<br>
-&#43; {<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long n asm(&quot;v0&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long r asm(&quot;v0&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long a0 asm(&quot;a0&quot;);<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long n;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long r;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long a0;<br>
-&#43;<br>
-&#43;&nbsp; &nbsp; &nbsp; n = num;<br>
-&#43;&nbsp; &nbsp; &nbsp; a0 = arg0;<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $v0,%1\n\t&quot;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $a0,%2\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KVM_HYPERCALL<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0,$v0\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &quot;=r&quot; (r) : &quot;r&quot; (n), &quot;r&quot; (a0) : &quot;memory&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br>
-&#43;<br>
-&#43;@@ -55,7 &#43;60,11 @@ static inline unsigned long kvm_hypercall2(unsigned long num,<br>
-&#43;&nbsp; &nbsp; &nbsp; a0 = arg0;<br>
-&#43;&nbsp; &nbsp; &nbsp; a1 = arg1;<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $v0,%1\n\t&quot;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $a0,%2\n\t&quot;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $a1,%3\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KVM_HYPERCALL<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $v0,%0\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &quot;=r&quot; (r) : &quot;r&quot; (n), &quot;r&quot; (a0), &quot;r&quot; (a1) : &quot;memory&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br>
-&#43;<br>
-&#43;@@ -65,18 &#43;74,23 @@ static inline unsigned long kvm_hypercall2(unsigned long num,<br>
-&#43; static inline unsigned long kvm_hypercall3(unsigned long num,<br>
-&#43;&nbsp; &nbsp; &nbsp; unsigned long arg0, unsigned long arg1, unsigned long arg2)<br>
-&#43; {<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long n asm(&quot;v0&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long r asm(&quot;v0&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long a0 asm(&quot;a0&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long a1 asm(&quot;a1&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register unsigned long a2 asm(&quot;a2&quot;);<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long n;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long r;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long a0;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long a1;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register unsigned long a2;<br>
-&#43;<br>
-&#43;&nbsp; &nbsp; &nbsp; n = num;<br>
-&#43;&nbsp; &nbsp; &nbsp; a0 = arg0;<br>
-&#43;&nbsp; &nbsp; &nbsp; a1 = arg1;<br>
-&#43;&nbsp; &nbsp; &nbsp; a2 = arg2;<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $v0,%1\n\t&quot;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $a0,%2\n\t&quot;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $a1,%3\n\t&quot;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $a2,%4\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; KVM_HYPERCALL<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;move $v0,%0\n\t&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; : &quot;=r&quot; (r) : &quot;r&quot; (n), &quot;r&quot; (a0), &quot;r&quot; (a1), &quot;r&quot; (a2) : &quot;memory&quot;<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br>
-&#43;<br>
-&#43;diff --git a/arch/mips/include/asm/sgiarcs.h b/arch/mips/include/asm/sgiarcs.h<br>
-&#43;index 26ddfff..a62c267 100644<br>
-&#43;--- a/arch/mips/include/asm/sgiarcs.h<br>
-&#43;&#43;&#43;&#43; b/arch/mips/include/asm/sgiarcs.h<br>
-&#43;@@ -388,9 &#43;388,10 @@ struct linux_smonblock {<br>
-&#43;<br>
-&#43; #define ARC_CALL1(dest, a1)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43; ({&nbsp; &nbsp;long __res;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a1 __asm__(&quot;$4&quot;) = (int) (long) (a1);&nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a1 = (int) (long) (a1);&nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; long __vec = (long) romvec-&gt;dest;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$4,%3\n\t&quot; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;dsubu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;jalr\t%1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;daddu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;@@ -403,10 &#43;404,12 @@ struct linux_smonblock {<br>
-&#43;<br>
-&#43; #define ARC_CALL2(dest, a1, a2)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43; ({&nbsp; &nbsp;long __res;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a1 __asm__(&quot;$4&quot;) = (int) (long) (a1);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a2 __asm__(&quot;$5&quot;) = (int) (long) (a2);&nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a1 = (int) (long) (a1);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a2 = (int) (long) (a2);&nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; long __vec = (long) romvec-&gt;dest;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$4,%3\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$5,%4\n\t&quot; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;dsubu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;jalr\t%1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;daddu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;@@ -419,11 &#43;422,14 @@ struct linux_smonblock {<br>
-&#43;<br>
-&#43; #define ARC_CALL3(dest, a1, a2, a3)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43; ({&nbsp; &nbsp;long __res;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a1 __asm__(&quot;$4&quot;) = (int) (long) (a1);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a2 __asm__(&quot;$5&quot;) = (int) (long) (a2);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a3 __asm__(&quot;$6&quot;) = (int) (long) (a3);&nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a1 = (int) (long) (a1);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a2 = (int) (long) (a2);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a3 = (int) (long) (a3);&nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; long __vec = (long) romvec-&gt;dest;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$4,%3\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$5,%4\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$6,%5\n\t&quot; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;dsubu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;jalr\t%1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;daddu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;@@ -436,12 &#43;442,16 @@ struct linux_smonblock {<br>
-&#43;<br>
-&#43; #define ARC_CALL4(dest, a1, a2, a3, a4)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43; ({&nbsp; &nbsp;long __res;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a1 __asm__(&quot;$4&quot;) = (int) (long) (a1);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a2 __asm__(&quot;$5&quot;) = (int) (long) (a2);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a3 __asm__(&quot;$6&quot;) = (int) (long) (a3);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a4 __asm__(&quot;$7&quot;) = (int) (long) (a4);&nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a1 = (int) (long) (a1);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a2 = (int) (long) (a2);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a3 = (int) (long) (a3);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a4 = (int) (long) (a4);&nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; long __vec = (long) romvec-&gt;dest;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$4,%3\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$5,%4\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$6,%5\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$7,%6\n\t&quot; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;dsubu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;jalr\t%1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;daddu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;@@ -455,13 &#43;465,17 @@ struct linux_smonblock {<br>
-&#43;<br>
-&#43; #define ARC_CALL5(dest, a1, a2, a3, a4, a5)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43; ({&nbsp; &nbsp;long __res;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a1 __asm__(&quot;$4&quot;) = (int) (long) (a1);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a2 __asm__(&quot;$5&quot;) = (int) (long) (a2);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a3 __asm__(&quot;$6&quot;) = (int) (long) (a3);&nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register signed int __a4 __asm__(&quot;$7&quot;) = (int) (long) (a4);&nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a1 = (int) (long) (a1);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a2 = (int) (long) (a2);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a3 = (int) (long) (a3);&nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register signed int __a4 = (int) (long) (a4);&nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; register signed int __a5 = (int) (long) (a5);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; long __vec = (long) romvec-&gt;dest;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$4,%3\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$5,%4\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$6,%5\n\t&quot; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move\t$7,%6\n\t&quot; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;dsubu\t$29, 32\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;sw\t%7, 16($29)\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;jalr\t%1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h<br>
-&#43;index 99eea59..c148256 100644<br>
-&#43;--- a/arch/mips/include/asm/thread_info.h<br>
-&#43;&#43;&#43;&#43; b/arch/mips/include/asm/thread_info.h<br>
-&#43;@@ -60,7 &#43;60,9 @@ struct thread_info {<br>
-&#43; /* How to get the thread information struct from C.&nbsp; */<br>
-&#43; static inline struct thread_info *current_thread_info(void)<br>
-&#43; {<br>
-&#43;-&nbsp; &nbsp; &nbsp;register struct thread_info *__current_thread_info __asm__(&quot;$28&quot;);<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register struct thread_info *__current_thread_info;<br>
-&#43;&#43;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; __asm__(&quot;move %0, $28&quot;: &quot;=r&quot;(__current_thread_info));<br>
-&#43;<br>
-&#43;&nbsp; &nbsp; &nbsp; return __current_thread_info;<br>
-&#43; }<br>
-&#43;diff --git a/arch/mips/include/asm/uaccess.h b/arch/mips/include/asm/uaccess.h<br>
-&#43;index bf8b324..96698c6 100644<br>
-&#43;--- a/arch/mips/include/asm/uaccess.h<br>
-&#43;&#43;&#43;&#43; b/arch/mips/include/asm/uaccess.h<br>
-&#43;@@ -788,18 &#43;788,21 @@ extern size_t __copy_user(void *__to, const void *__from, size_t __n);<br>
-&#43; #ifndef CONFIG_EVA<br>
-&#43; #define __invoke_copy_to_user(to, from, n)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; ({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register void __user *__cu_to_r __asm__(&quot;$4&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;register const void *__cu_from_r __asm__(&quot;$5&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long __cu_len_r __asm__(&quot;$6&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register void __user *__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register const void *__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long __cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $4, %0\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $5, %1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $6, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __MODULE_JAL(__copy_user)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0, $4\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %1, $5\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %2, $6\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; : &quot;&#43;r&quot; (__cu_to_r), &quot;&#43;r&quot; (__cu_from_r), &quot;&#43;r&quot; (__cu_len_r)&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;: &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;: &quot;$4&quot;, &quot;$5&quot;, &quot;$6&quot;, &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; DADDI_SCRATCH, &quot;memory&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __cu_len_r;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; })<br>
-&#43;@@ -923,23 &#43;926,26 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);<br>
-&#43;<br>
-&#43; #define __invoke_copy_from_user(to, from, n)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; ({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register void *__cu_to_r __asm__(&quot;$4&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r __asm__(&quot;$5&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long __cu_len_r __asm__(&quot;$6&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register void *__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long __cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tnoreorder\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $4, %0\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $5, %1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $6, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __MODULE_JAL(__copy_user)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tnoat\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; __UA_ADDU &quot;\t$1, %1, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0, $4\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %1, $5\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %2, $6\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tat\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\treorder&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; : &quot;&#43;r&quot; (__cu_to_r), &quot;&#43;r&quot; (__cu_from_r), &quot;&#43;r&quot; (__cu_len_r)&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;: &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;: &quot;$4&quot;, &quot;$5&quot;, &quot;$6&quot;, &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; DADDI_SCRATCH, &quot;memory&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __cu_len_r;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; })<br>
-&#43;@@ -957,23 &#43;963,26 @@ extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n);<br>
-&#43;<br>
-&#43; #define __invoke_copy_from_user_inatomic(to, from, n)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43; ({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register void *__cu_to_r __asm__(&quot;$4&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r __asm__(&quot;$5&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long __cu_len_r __asm__(&quot;$6&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register void *__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long __cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tnoreorder\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $4, %0\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $5, %1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $6, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __MODULE_JAL(__copy_user_inatomic)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tnoat\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; __UA_ADDU &quot;\t$1, %1, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0, $4\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %1, $5\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %2, $6\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tat\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\treorder&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; : &quot;&#43;r&quot; (__cu_to_r), &quot;&#43;r&quot; (__cu_from_r), &quot;&#43;r&quot; (__cu_len_r)&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;: &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;: &quot;$4&quot;, &quot;$5&quot;, &quot;$6&quot;, &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; DADDI_SCRATCH, &quot;memory&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __cu_len_r;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; })<br>
-&#43;@@ -995,41 &#43;1004,47 @@ extern size_t __copy_in_user_eva(void *__to, const void *__from, size_t __n);<br>
-&#43;<br>
-&#43; #define __invoke_copy_from_user_eva_generic(to, from, n, func_ptr)&nbsp; &nbsp;\<br>
-&#43; ({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register void *__cu_to_r __asm__(&quot;$4&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r __asm__(&quot;$5&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long __cu_len_r __asm__(&quot;$6&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register void *__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long __cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tnoreorder\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $4, %0\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $5, %1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $6, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __MODULE_JAL(func_ptr)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tnoat\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; __UA_ADDU &quot;\t$1, %1, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0, $4\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %1, $5\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %2, $6\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\tat\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &quot;.set\treorder&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; : &quot;&#43;r&quot; (__cu_to_r), &quot;&#43;r&quot; (__cu_from_r), &quot;&#43;r&quot; (__cu_len_r)&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;: &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;: &quot;$4&quot;, &quot;$5&quot;, &quot;$6&quot;, &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; DADDI_SCRATCH, &quot;memory&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __cu_len_r;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; })<br>
-&#43;<br>
-&#43; #define __invoke_copy_to_user_eva_generic(to, from, n, func_ptr)&nbsp; &nbsp; &nbsp;\<br>
-&#43; ({&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register void *__cu_to_r __asm__(&quot;$4&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r __asm__(&quot;$5&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long __cu_len_r __asm__(&quot;$6&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register void *__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register const void __user *__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long __cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_to_r = (to);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_from_r = (from);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;__cu_len_r = (n);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __asm__ __volatile__(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $4, %0\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $5, %1\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move $6, %2\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __MODULE_JAL(func_ptr)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %0, $4\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %1, $5\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &quot;move %2, $6\n\t&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; : &quot;&#43;r&quot; (__cu_to_r), &quot;&#43;r&quot; (__cu_from_r), &quot;&#43;r&quot; (__cu_len_r)&nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; :&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;-&nbsp; &nbsp; &nbsp;: &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; \<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;: &quot;$4&quot;, &quot;$5&quot;, &quot;$6&quot;, &quot;$8&quot;, &quot;$9&quot;, &quot;$10&quot;, &quot;$11&quot;, &quot;$12&quot;, &quot;$14&quot;, &quot;$15&quot;, &quot;$24&quot;, &quot;$31&quot;,&nbsp; &nbsp; &nbsp; &nbsp; \<br>
-&#43;&nbsp; &nbsp; &nbsp; &nbsp; DADDI_SCRATCH, &quot;memory&quot;);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43;&nbsp; &nbsp; &nbsp; __cu_len_r;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\<br>
-&#43; })<br>
-&#43;diff --git a/arch/mips/lib/uncached.c b/arch/mips/lib/uncached.c<br>
-&#43;index 09d5dee..c520eb1 100644<br>
-&#43;--- a/arch/mips/lib/uncached.c<br>
-&#43;&#43;&#43;&#43; b/arch/mips/lib/uncached.c<br>
-&#43;@@ -37,8 &#43;37,9 @@<br>
-&#43;&nbsp; */<br>
-&#43; unsigned long run_uncached(void *func)<br>
-&#43; {<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long sp __asm__(&quot;$sp&quot;);<br>
-&#43;-&nbsp; &nbsp; &nbsp;register long ret __asm__(&quot;$2&quot;);<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long sp;<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; __asm__ volatile (&quot;move %0, $sp&quot; : &quot;=r&quot;(sp));<br>
-&#43;&#43;&nbsp; &nbsp; &nbsp;register long ret;<br>
-&#43;&nbsp; &nbsp; &nbsp; long lfunc = (long)func, ufunc;<br>
-&#43;&nbsp; &nbsp; &nbsp; long usp;<br>
-&#43;<br>
-&#43;--<br>
-&#43;2.1.3<br>
-&#43;<br>
-diff --git a/arch/mips/patches/series b/arch/mips/patches/series<br>
-index 1aaf96a..e219c25 100644<br>
---- a/arch/mips/patches/series<br>
-&#43;&#43;&#43; b/arch/mips/patches/series<br>
-@@ -2,3 &#43;2,4 @@ mips-fix-cast-to-type-not-present-in-union.patch<br>
- mips-fix-inline-asm-input-output-type-mismatch.patch<br>
- mips-silence-variable-self-assignment-warnings.patch<br>
- mips-silence-unicode-warnings.patch<br>
-&#43;mips-remove-explicit-register-variables.patch<br>
---<br>
-2.1.3<br>
-<br>
diff --git a/arch/mips/patches/mips-change-current_thread_info-to-an-equivalent-sup.patch b/arch/mips/patches/mips-change-current_thread_info-to-an-equivalent-sup.patch<br>
new file mode 100644<br>
index 0000000..83b17ce<br>
--- /dev/null<br>
&#43;&#43;&#43; b/arch/mips/patches/mips-change-current_thread_info-to-an-equivalent-sup.patch<br>
@@ -0,0 &#43;1,50 @@<br>
&#43;From 3e8b879d48a805fdad49914259511d7f47b36a73 Mon Sep 17 00:00:00 2001<br>
&#43;From: Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com">daniel.sanders@imgtec.com</a>&gt;<br>
&#43;Date: Fri, 9 Jan 2015 10:54:22 &#43;0000<br>
&#43;Subject: [PATCH] MIPS: Changed current_thread_info() to an equivalent<br>
&#43; supported by both clang and GCC<br>
&#43;<br>
&#43;Without this, a 'break' instruction is executed very early in the boot and<br>
&#43;the boot hangs.<br>
&#43;<br>
&#43;The problem is that clang doesn't honour named registers on local variables<br>
&#43;and silently treats them as normal uninitialized variables. However, it<br>
&#43;does honour them on global variables.<br>
&#43;<br>
&#43;Signed-off-by: Daniel Sanders &lt;<a href="mailto:daniel.sanders@imgtec.com">daniel.sanders@imgtec.com</a>&gt;<br>
&#43;---<br>
&#43; arch/mips/include/asm/thread_info.h | 6 &#43;&#43;&#43;---<br>
&#43; 1 file changed, 3 insertions(&#43;), 3 deletions(-)<br>
&#43;<br>
&#43;For reference, a similar patch for ARM's stack pointer has already been merged:<br>
&#43;&nbsp; 0abc08b ARM: 8170/1: Add global named register current_stack_pointer for ARM<br>
&#43;<br>
&#43;This is part of a patch series to get Linux for Mips working when compiled with<br>
&#43;clang. I've chosen to submit this patch individually since it's my first kernel<br>
&#43;patch and I'd like to be sure I'm following your processes correctly before I<br>
&#43;submit all of them.<br>
&#43;<br>
&#43;Please CC me on replies since I'm not subscribed to the mailing list.<br>
&#43;<br>
&#43;diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h<br>
&#43;index 99eea59..2a2f3c4 100644<br>
&#43;--- a/arch/mips/include/asm/thread_info.h<br>
&#43;&#43;&#43;&#43; b/arch/mips/include/asm/thread_info.h<br>
&#43;@@ -58,11 &#43;58,11 @@ struct thread_info {<br>
&#43; #define init_stack&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (init_thread_union.stack)<br>
&#43;<br>
&#43; /* How to get the thread information struct from C.&nbsp; */<br>
&#43;&#43;register struct thread_info *current_gp_register asm(&quot;$28&quot;);<br>
&#43;&#43;<br>
&#43; static inline struct thread_info *current_thread_info(void)<br>
&#43; {<br>
&#43;-&nbsp; &nbsp; &nbsp; register struct thread_info *__current_thread_info __asm__(&quot;$28&quot;);<br>
&#43;-<br>
&#43;-&nbsp; &nbsp; &nbsp; return __current_thread_info;<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; return current_gp_register;<br>
&#43; }<br>
&#43;<br>
&#43; #endif /* !__ASSEMBLY__ */<br>
&#43;--<br>
&#43;2.1.4<br>
&#43;<br>
diff --git a/arch/mips/patches/series b/arch/mips/patches/series<br>
index ad1334a..7fc1a7d 100644<br>
--- a/arch/mips/patches/series<br>
&#43;&#43;&#43; b/arch/mips/patches/series<br>
@@ -2,5 &#43;2,4 @@ mips-fix-cast-to-type-not-present-in-union.patch<br>
&nbsp;mips-fix-inline-asm-input-output-type-mismatch.patch<br>
&nbsp;mips-silence-variable-self-assignment-warnings.patch<br>
&nbsp;mips-silence-unicode-warnings.patch<br>
-mips-WIP-Fix-slab-allocator-bootstrap.patch<br>
-mips-DO-NOT-UPSTREAM-mips-Remove-all-instances-of-explici.patch<br>
&#43;mips-change-current_thread_info-to-an-equivalent-sup.patch<br>
diff --git a/toolchain/clang/patches/llvm/mips-named-registers.patch b/toolchain/clang/patches/llvm/mips-named-registers.patch<br>
new file mode 100644<br>
index 0000000..99d0888<br>
--- /dev/null<br>
&#43;&#43;&#43; b/toolchain/clang/patches/llvm/mips-named-registers.patch<br>
@@ -0,0 &#43;1,39 @@<br>
&#43;--- llvm.orig/lib/Target/Mips/MipsISelLowering.cpp<br>
&#43;&#43;&#43;&#43; llvm/lib/Target/Mips/MipsISelLowering.cpp<br>
&#43;@@ -3836,3 &#43;3836,25 @@<br>
&#43;<br>
&#43;&nbsp; &nbsp;return BB;<br>
&#43; }<br>
&#43;&#43;<br>
&#43;&#43;// FIXME? Maybe this could be a TableGen attribute on some registers and<br>
&#43;&#43;// this table could be generated automatically from RegInfo.<br>
&#43;&#43;unsigned MipsTargetLowering::getRegisterByName(const char* RegName,<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EVT VT) const {<br>
&#43;&#43;&nbsp; // Named registers is expected to be fairly rare. For now, just support $28<br>
&#43;&#43;&nbsp; // since the linux kernel uses it.<br>
&#43;&#43;&nbsp; if (Subtarget.isGP64bit()) {<br>
&#43;&#43;&nbsp; &nbsp; unsigned Reg = StringSwitch&lt;unsigned&gt;(RegName)<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Case(&quot;$28&quot;, Mips::GP_64)<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Default(0);<br>
&#43;&#43;&nbsp; &nbsp; if (Reg)<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; return Reg;<br>
&#43;&#43;&nbsp; } else {<br>
&#43;&#43;&nbsp; &nbsp; unsigned Reg = StringSwitch&lt;unsigned&gt;(RegName)<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Case(&quot;$28&quot;, Mips::GP)<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.Default(0);<br>
&#43;&#43;&nbsp; &nbsp; if (Reg)<br>
&#43;&#43;&nbsp; &nbsp; &nbsp; return Reg;<br>
&#43;&#43;&nbsp; }<br>
&#43;&#43;&nbsp; report_fatal_error(&quot;Invalid register name global variable&quot;);<br>
&#43;&#43;}<br>
&#43;--- llvm.orig/lib/Target/Mips/MipsISelLowering.h<br>
&#43;&#43;&#43;&#43; llvm/lib/Target/Mips/MipsISelLowering.h<br>
&#43;@@ -262,6 &#43;262,8 @@<br>
&#43;<br>
&#43;&nbsp; &nbsp; &nbsp;void HandleByVal(CCState *, unsigned &amp;, unsigned) const override;<br>
&#43;<br>
&#43;&#43;&nbsp; &nbsp; unsigned getRegisterByName(const char* RegName, EVT VT) const;<br>
&#43;&#43;<br>
&#43;&nbsp; &nbsp;protected:<br>
&#43;&nbsp; &nbsp; &nbsp;SDValue getGlobalReg(SelectionDAG &amp;DAG, EVT Ty) const;<br>
&#43;<br>
diff --git a/toolchain/clang/patches/llvm/series b/toolchain/clang/patches/llvm/series<br>
index f0b4536..b65b208 100644<br>
--- a/toolchain/clang/patches/llvm/series<br>
&#43;&#43;&#43; b/toolchain/clang/patches/llvm/series<br>
@@ -1 &#43;1,2 @@<br>
&nbsp;call_graph.patch<br>
&#43;mips-named-registers.patch<br>
<span class="hoenzb"><span style="color:#888888">--</span></span><span style="color:#888888"><br>
<span class="hoenzb">2.1.4</span><br>
<br>
<span class="hoenzb">_______________________________________________</span><br>
<span class="hoenzb">LLVMLinux mailing list</span><br>
<span class="hoenzb"><a href="mailto:LLVMLinux@lists.linuxfoundation.org">LLVMLinux@lists.linuxfoundation.org</a></span><br>
<span class="hoenzb"><a href="https://lists.linuxfoundation.org/mailman/listinfo/llvmlinux" target="_blank">https://lists.linuxfoundation.org/mailman/listinfo/llvmlinux</a></span></span><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</div>
</div>
</body>
</html>