mirror of
https://github.com/johnwinans/rvalp.git
synced 2025-10-03 16:10:45 -04:00
Add leading zeros to literals to eliminate sign confusion
This commit is contained in:
parent
6e0bb98500
commit
adbcd27a43
@ -365,26 +365,26 @@ Introduce and present subroutines but not nesting until introduce stack operatio
|
|||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
li rd,constant lui rd,(constant >>U 12)+(constant & 0x00000800 ? 1 : 0)
|
li rd,constant lui rd,(constant >>U 12)+(constant & 0x00000800 ? 1 : 0)
|
||||||
addi rd,rd,(constant & 0xfff)
|
addi rd,rd,(constant & 0x00000fff)
|
||||||
|
|
||||||
la rd,label
|
la rd,label
|
||||||
auipc rd,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
auipc rd,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
||||||
addi rd,rd,((label-(.-4)) & 0xfff)
|
addi rd,rd,((label-(.-4)) & 0x00000fff)
|
||||||
|
|
||||||
l{b|h|w} rd,label
|
l{b|h|w} rd,label
|
||||||
auipc rd,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
auipc rd,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
||||||
l{b|h|w} rd,((label-(.-4)) & 0xfff)(rd)
|
l{b|h|w} rd,((label-(.-4)) & 0x00000fff)(rd)
|
||||||
|
|
||||||
s{b|h|w} rd,label,rt # rt used as a temp reg for the operation (default=x6)
|
s{b|h|w} rd,label,rt # rt used as a temp reg for the operation (default=x6)
|
||||||
auipc rt,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
auipc rt,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
||||||
s{b|h|w} rd,((label-(.-4)) & 0xfff)(rt)
|
s{b|h|w} rd,((label-(.-4)) & 0x00000fff)(rt)
|
||||||
|
|
||||||
call label auipc x1,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
call label auipc x1,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
||||||
jalr x1,((label-(.-4)) & 0xfff)(x1)
|
jalr x1,((label-(.-4)) & 0x00000fff)(x1)
|
||||||
|
|
||||||
tail label,rt # rt used as a temp reg for the operation (default=x6)
|
tail label,rt # rt used as a temp reg for the operation (default=x6)
|
||||||
auipc rt,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
auipc rt,((label-.) >>U 12) + ((label-.) & 0x00000800 ? 1 : 0)
|
||||||
jalr x0,((label-(.-4)) & 0xfff)(rt)
|
jalr x0,((label-(.-4)) & 0x00000fff)(rt)
|
||||||
|
|
||||||
mv rd,rs addi rd,rs,0
|
mv rd,rs addi rd,rs,0
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ To remedy this problem, the value used in the {\tt lui} instruction can altered
|
|||||||
instruction:
|
instruction:
|
||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
lui x5,0x12346 // x5 = 0x12346000 (note this is 0x12345 + 1)
|
lui x5,0x12346 // x5 = 0x12346000 (note: this is 0x12345000 + 0x1000)
|
||||||
addi x5,x5,0x800 // x5 = 0x12346000 + sx(0x800) = 0x12346000 + 0xfffff800 = 0x12345800
|
addi x5,x5,0x800 // x5 = 0x12346000 + sx(0x800) = 0x12346000 + 0xfffff800 = 0x12345800
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
}
|
||||||
@ -481,7 +481,7 @@ The \verb@la@ instruction here will expand into:
|
|||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
00010040 auipc x10,((var1-.) >>U 12) + ((var1-.) & 0x00000800 ? 1 : 0)
|
00010040 auipc x10,((var1-.) >>U 12) + ((var1-.) & 0x00000800 ? 1 : 0)
|
||||||
00010044 addi x10,x10,((var1-(.-4)) & 0xfff)
|
00010044 addi x10,x10,((var1-(.-4)) & 0x00000fff)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,14 +498,14 @@ Therefore the expanded pseudoinstruction example will become:
|
|||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
00010040 auipc x10,((0x00010900-0x00010040) >>U 12) + ((0x00010900-0x00010040) & 0x00000800 ? 1 : 0)
|
00010040 auipc x10,((0x00010900-0x00010040) >>U 12) + ((0x00010900-0x00010040) & 0x00000800 ? 1 : 0)
|
||||||
00010044 addi x10,x10,((0x00010900-(0x00010044-4)) & 0xfff) # note the extra -4 here!
|
00010044 addi x10,x10,((0x00010900-(0x00010044-4)) & 0x00000fff) # note the extra -4 here!
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
}
|
||||||
After performing the subtractions, it will reduce to this:
|
After performing the subtractions, it will reduce to this:
|
||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
00010040 auipc x10,(0x000008c0 >>U 12) + ((0x000008c0) & 0x00000800 ? 1 : 0)
|
00010040 auipc x10,(0x000008c0 >>U 12) + ((0x000008c0) & 0x00000800 ? 1 : 0)
|
||||||
00010044 addi x10,x10,(0x000008c0 & 0xfff)
|
00010044 addi x10,x10,(0x000008c0 & 0x00000fff)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
}
|
||||||
Continuing to reduce the math operations we get:
|
Continuing to reduce the math operations we get:
|
||||||
@ -546,7 +546,7 @@ To refer to an absolute value, the following operators can be used:
|
|||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
%hi(constant) // becomes: (constant >>U 12)+(constant & 0x00000800 ? 1 : 0)
|
%hi(constant) // becomes: (constant >>U 12)+(constant & 0x00000800 ? 1 : 0)
|
||||||
%lo(constant) // becomes: (constant & 0xfff)
|
%lo(constant) // becomes: (constant & 0x00000fff)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,7 +567,7 @@ The following can be used for PC-relative addresses:
|
|||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
%pcrel_hi(symbol) // becomes: ((symbol-.) >>U 12) + ((symbol-.) & 0x00000800 ? 1 : 0)
|
%pcrel_hi(symbol) // becomes: ((symbol-.) >>U 12) + ((symbol-.) & 0x00000800 ? 1 : 0)
|
||||||
%pcrel_lo(lab) // becomes: ((symbol-lab) & 0xfff)
|
%pcrel_lo(lab) // becomes: ((symbol-lab) & 0x00000fff)
|
||||||
\end{verbatim}
|
\end{verbatim}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,7 +590,7 @@ Examples of using the \verb@auipc@ \& \verb@addi@ together with \verb@%pcrel_hi(
|
|||||||
{\small
|
{\small
|
||||||
\begin{verbatim}
|
\begin{verbatim}
|
||||||
xxx: auipc t1,%pcrel_hi(yyy) // (yyy-xxx) >>U 12) + ((yyy-xxx) & 0x00000800 ? 1 : 0)
|
xxx: auipc t1,%pcrel_hi(yyy) // (yyy-xxx) >>U 12) + ((yyy-xxx) & 0x00000800 ? 1 : 0)
|
||||||
addi t1,t1,%pcrel_lo(xxx) // ((yyy-xxx) & 0xfff)
|
addi t1,t1,%pcrel_lo(xxx) // ((yyy-xxx) & 0x00000fff)
|
||||||
...
|
...
|
||||||
yyy: // the address: yyy is saved into t1 above
|
yyy: // the address: yyy is saved into t1 above
|
||||||
...
|
...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user