Message ID | 20191203052858.23798-1-masahiroy@kernel.org |
---|---|
State | Accepted |
Delegated to: | Bin Meng |
Headers | show |
Series | [U-Boot] x86: simplify ljmp to 32-bit code | expand |
Hi Masahiro, On Tue, Dec 3, 2019 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > You can directly specify the label as the operand for ljmp. > > This commit saves 4-byte code. > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > > arch/x86/cpu/start16.S | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S > index bcabd76741ef..7bad9f3e4d87 100644 > --- a/arch/x86/cpu/start16.S > +++ b/arch/x86/cpu/start16.S > @@ -44,10 +44,8 @@ data32 cs lgdt gdt_ptr > ff: > > /* Finally restore BIST and jump to the 32-bit initialization code */ > - movw $code32start, %ax > - movw %ax, %bp > movl %ecx, %eax > -data32 cs ljmp *(%bp) > +data32 cs ljmp code32start There should be a * before code32start, otherwise gas reportes: arch/x86/cpu/start16.S: Assembler messages: arch/x86/cpu/start16.S:48: Warning: indirect ljmp without `*' > > /* 48-bit far pointer */ > code32start: > -- Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com> Regards, Bin
On Sun, Dec 8, 2019 at 6:43 PM Bin Meng <bmeng.cn@gmail.com> wrote: > > Hi Masahiro, > > On Tue, Dec 3, 2019 at 1:29 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > You can directly specify the label as the operand for ljmp. > > > > This commit saves 4-byte code. > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > --- > > > > arch/x86/cpu/start16.S | 4 +--- > > 1 file changed, 1 insertion(+), 3 deletions(-) > > > > diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S > > index bcabd76741ef..7bad9f3e4d87 100644 > > --- a/arch/x86/cpu/start16.S > > +++ b/arch/x86/cpu/start16.S > > @@ -44,10 +44,8 @@ data32 cs lgdt gdt_ptr > > ff: > > > > /* Finally restore BIST and jump to the 32-bit initialization code */ > > - movw $code32start, %ax > > - movw %ax, %bp > > movl %ecx, %eax > > -data32 cs ljmp *(%bp) > > +data32 cs ljmp code32start > > There should be a * before code32start, otherwise gas reportes: > > arch/x86/cpu/start16.S: Assembler messages: > arch/x86/cpu/start16.S:48: Warning: indirect ljmp without `*' fixed the warning by adding * before code32start > > > > > /* 48-bit far pointer */ > > code32start: > > -- > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> > Tested-by: Bin Meng <bmeng.cn@gmail.com> and applied to u-boot-x86, thanks!
diff --git a/arch/x86/cpu/start16.S b/arch/x86/cpu/start16.S index bcabd76741ef..7bad9f3e4d87 100644 --- a/arch/x86/cpu/start16.S +++ b/arch/x86/cpu/start16.S @@ -44,10 +44,8 @@ data32 cs lgdt gdt_ptr ff: /* Finally restore BIST and jump to the 32-bit initialization code */ - movw $code32start, %ax - movw %ax, %bp movl %ecx, %eax -data32 cs ljmp *(%bp) +data32 cs ljmp code32start /* 48-bit far pointer */ code32start:
You can directly specify the label as the operand for ljmp. This commit saves 4-byte code. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- arch/x86/cpu/start16.S | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)