Message ID | 20230520072719.27986-8-chenhao@loongson.cn |
---|---|
State | Superseded |
Headers | show |
Series | [FFmpeg-devel,v3,1/7] avcodec/la: add LSX optimization for h264 idct. | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Le lauantaina 20. toukokuuta 2023, 10.27.19 EEST Hao Chen a écrit : > From: yuanhecai <yuanhecai@loongson.cn> > > This patch supports the use of the "checkasm --bench" testing feature > on loongarch platform. > > Change-Id: I42790388d057c9ade0dfa38a19d9c1fd44ca0bc3 > --- > libavutil/loongarch/timer.h | 48 +++++++++++++++++++++++++++++++++++++ > libavutil/timer.h | 2 ++ > 2 files changed, 50 insertions(+) > create mode 100644 libavutil/loongarch/timer.h > > diff --git a/libavutil/loongarch/timer.h b/libavutil/loongarch/timer.h > new file mode 100644 > index 0000000000..44ed786409 > --- /dev/null > +++ b/libavutil/loongarch/timer.h > @@ -0,0 +1,48 @@ > +/* > + * Copyright (c) 2023 Loongson Technology Corporation Limited > + * Contributed by Hecai Yuan <yuanhecai@loongson.cn> > + * > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 > USA + */ > + > +#ifndef AVUTIL_LOONGARCH_TIMER_H > +#define AVUTIL_LOONGARCH_TIMER_H > + > +#include <stdint.h> > +#include "config.h" > + > +#if HAVE_INLINE_ASM > + > +#define AV_READ_TIME read_time > + > +static inline uint64_t read_time(void) > +{ > + > +#if ARCH_LOONGARCH64 > + uint64_t a, id = 0; Initial value is never used. > + __asm__ volatile ( "rdtime.d %0, %1" : "=r"(a), "=r"(id) :: "memory" > ); + return a; > +#else > + uint32_t a, id = 0; > + __asm__ volatile ( "rdtimel.w %0, %1" : "=r"(a), "=r"(id) :: "memory" > ); + return (uint64_t)a; > +#endif Why do you clobber memory here? > +} > + > +#endif /* HAVE_INLINE_ASM */ > + > +#endif /* AVUTIL_LOONGARCH_TIMER_H */ > diff --git a/libavutil/timer.h b/libavutil/timer.h > index d3db5a27ef..861ba7e9d7 100644 > --- a/libavutil/timer.h > +++ b/libavutil/timer.h > @@ -61,6 +61,8 @@ > # include "riscv/timer.h" > #elif ARCH_X86 > # include "x86/timer.h" > +#elif ARCH_LOONGARCH > +# include "loongarch/timer.h" > #endif > > #if !defined(AV_READ_TIME)
在 2023/5/20 下午5:38, Rémi Denis-Courmont 写道: > Le lauantaina 20. toukokuuta 2023, 10.27.19 EEST Hao Chen a écrit : >> From: yuanhecai <yuanhecai@loongson.cn> >> >> This patch supports the use of the "checkasm --bench" testing feature >> on loongarch platform. >> >> Change-Id: I42790388d057c9ade0dfa38a19d9c1fd44ca0bc3 >> --- >> libavutil/loongarch/timer.h | 48 +++++++++++++++++++++++++++++++++++++ >> libavutil/timer.h | 2 ++ >> 2 files changed, 50 insertions(+) >> create mode 100644 libavutil/loongarch/timer.h >> >> diff --git a/libavutil/loongarch/timer.h b/libavutil/loongarch/timer.h >> new file mode 100644 >> index 0000000000..44ed786409 >> --- /dev/null >> +++ b/libavutil/loongarch/timer.h >> @@ -0,0 +1,48 @@ >> +/* >> + * Copyright (c) 2023 Loongson Technology Corporation Limited >> + * Contributed by Hecai Yuan <yuanhecai@loongson.cn> >> + * >> + * This file is part of FFmpeg. >> + * >> + * FFmpeg is free software; you can redistribute it and/or >> + * modify it under the terms of the GNU Lesser General Public >> + * License as published by the Free Software Foundation; either >> + * version 2.1 of the License, or (at your option) any later version. >> + * >> + * FFmpeg is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >> + * Lesser General Public License for more details. >> + * >> + * You should have received a copy of the GNU Lesser General Public >> + * License along with FFmpeg; if not, write to the Free Software >> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >> USA + */ >> + >> +#ifndef AVUTIL_LOONGARCH_TIMER_H >> +#define AVUTIL_LOONGARCH_TIMER_H >> + >> +#include <stdint.h> >> +#include "config.h" >> + >> +#if HAVE_INLINE_ASM >> + >> +#define AV_READ_TIME read_time >> + >> +static inline uint64_t read_time(void) >> +{ >> + >> +#if ARCH_LOONGARCH64 >> + uint64_t a, id = 0; > Initial value is never used. > >> + __asm__ volatile ( "rdtime.d %0, %1" : "=r"(a), "=r"(id) :: "memory" >> ); + return a; >> +#else >> + uint32_t a, id = 0; >> + __asm__ volatile ( "rdtimel.w %0, %1" : "=r"(a), "=r"(id) :: "memory" >> ); + return (uint64_t)a; >> +#endif > Why do you clobber memory here? > >> +} >> + >> +#endif /* HAVE_INLINE_ASM */ >> + >> +#endif /* AVUTIL_LOONGARCH_TIMER_H */ >> diff --git a/libavutil/timer.h b/libavutil/timer.h >> index d3db5a27ef..861ba7e9d7 100644 >> --- a/libavutil/timer.h >> +++ b/libavutil/timer.h >> @@ -61,6 +61,8 @@ >> # include "riscv/timer.h" >> #elif ARCH_X86 >> # include "x86/timer.h" >> +#elif ARCH_LOONGARCH >> +# include "loongarch/timer.h" >> #endif >> >> #if !defined(AV_READ_TIME) >> > Thanks for your advice. As described in loongarch's instruction > manual, the rdtime.d instruction is used as follows: > rdtime.d rd, rj. The rj register stores the counter ID. In this > application, the value of counter ID is equal to 0. > In addition, clobbering memory is really not a necessary > operation. I will remove it.
Le 24 mai 2023 10:39:59 GMT+03:00, Hao Chen <chenhao@loongson.cn> a écrit : > >在 2023/5/20 下午5:38, Rémi Denis-Courmont 写道: >> Le lauantaina 20. toukokuuta 2023, 10.27.19 EEST Hao Chen a écrit : >>> From: yuanhecai <yuanhecai@loongson.cn> >>> >>> This patch supports the use of the "checkasm --bench" testing feature >>> on loongarch platform. >>> >>> Change-Id: I42790388d057c9ade0dfa38a19d9c1fd44ca0bc3 >>> --- >>> libavutil/loongarch/timer.h | 48 +++++++++++++++++++++++++++++++++++++ >>> libavutil/timer.h | 2 ++ >>> 2 files changed, 50 insertions(+) >>> create mode 100644 libavutil/loongarch/timer.h >>> >>> diff --git a/libavutil/loongarch/timer.h b/libavutil/loongarch/timer.h >>> new file mode 100644 >>> index 0000000000..44ed786409 >>> --- /dev/null >>> +++ b/libavutil/loongarch/timer.h >>> @@ -0,0 +1,48 @@ >>> +/* >>> + * Copyright (c) 2023 Loongson Technology Corporation Limited >>> + * Contributed by Hecai Yuan <yuanhecai@loongson.cn> >>> + * >>> + * This file is part of FFmpeg. >>> + * >>> + * FFmpeg is free software; you can redistribute it and/or >>> + * modify it under the terms of the GNU Lesser General Public >>> + * License as published by the Free Software Foundation; either >>> + * version 2.1 of the License, or (at your option) any later version. >>> + * >>> + * FFmpeg is distributed in the hope that it will be useful, >>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >>> + * Lesser General Public License for more details. >>> + * >>> + * You should have received a copy of the GNU Lesser General Public >>> + * License along with FFmpeg; if not, write to the Free Software >>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >>> USA + */ >>> + >>> +#ifndef AVUTIL_LOONGARCH_TIMER_H >>> +#define AVUTIL_LOONGARCH_TIMER_H >>> + >>> +#include <stdint.h> >>> +#include "config.h" >>> + >>> +#if HAVE_INLINE_ASM >>> + >>> +#define AV_READ_TIME read_time >>> + >>> +static inline uint64_t read_time(void) >>> +{ >>> + >>> +#if ARCH_LOONGARCH64 >>> + uint64_t a, id = 0; >> Initial value is never used. >> >>> + __asm__ volatile ( "rdtime.d %0, %1" : "=r"(a), "=r"(id) :: "memory" >>> ); + return a; >>> +#else >>> + uint32_t a, id = 0; >>> + __asm__ volatile ( "rdtimel.w %0, %1" : "=r"(a), "=r"(id) :: "memory" >>> ); + return (uint64_t)a; >>> +#endif >> Why do you clobber memory here? >> >>> +} >>> + >>> +#endif /* HAVE_INLINE_ASM */ >>> + >>> +#endif /* AVUTIL_LOONGARCH_TIMER_H */ >>> diff --git a/libavutil/timer.h b/libavutil/timer.h >>> index d3db5a27ef..861ba7e9d7 100644 >>> --- a/libavutil/timer.h >>> +++ b/libavutil/timer.h >>> @@ -61,6 +61,8 @@ >>> # include "riscv/timer.h" >>> #elif ARCH_X86 >>> # include "x86/timer.h" >>> +#elif ARCH_LOONGARCH >>> +# include "loongarch/timer.h" >>> #endif >>> >>> #if !defined(AV_READ_TIME) >>> >> Thanks for your advice. As described in loongarch's instruction manual, the rdtime.d instruction is used as follows: >> rdtime.d rd, rj. The rj register stores the counter ID. In this application, the value of counter ID is equal to 0. You're setting a value, zero, to a variable `id`, that is then used as output operand. As far as the compiler is concerned, the value zero is never used and the initialisation can be elided. The value of register %1 is unspecified. If you meant for `id` to be an input operand, the constraints are incorrect.
在 2023/5/24 下午7:03, Rémi Denis-Courmont 写道: > > Le 24 mai 2023 10:39:59 GMT+03:00, Hao Chen <chenhao@loongson.cn> a écrit : >> 在 2023/5/20 下午5:38, Rémi Denis-Courmont 写道: >>> Le lauantaina 20. toukokuuta 2023, 10.27.19 EEST Hao Chen a écrit : >>>> From: yuanhecai <yuanhecai@loongson.cn> >>>> >>>> This patch supports the use of the "checkasm --bench" testing feature >>>> on loongarch platform. >>>> >>>> Change-Id: I42790388d057c9ade0dfa38a19d9c1fd44ca0bc3 >>>> --- >>>> libavutil/loongarch/timer.h | 48 +++++++++++++++++++++++++++++++++++++ >>>> libavutil/timer.h | 2 ++ >>>> 2 files changed, 50 insertions(+) >>>> create mode 100644 libavutil/loongarch/timer.h >>>> >>>> diff --git a/libavutil/loongarch/timer.h b/libavutil/loongarch/timer.h >>>> new file mode 100644 >>>> index 0000000000..44ed786409 >>>> --- /dev/null >>>> +++ b/libavutil/loongarch/timer.h >>>> @@ -0,0 +1,48 @@ >>>> +/* >>>> + * Copyright (c) 2023 Loongson Technology Corporation Limited >>>> + * Contributed by Hecai Yuan <yuanhecai@loongson.cn> >>>> + * >>>> + * This file is part of FFmpeg. >>>> + * >>>> + * FFmpeg is free software; you can redistribute it and/or >>>> + * modify it under the terms of the GNU Lesser General Public >>>> + * License as published by the Free Software Foundation; either >>>> + * version 2.1 of the License, or (at your option) any later version. >>>> + * >>>> + * FFmpeg is distributed in the hope that it will be useful, >>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >>>> + * Lesser General Public License for more details. >>>> + * >>>> + * You should have received a copy of the GNU Lesser General Public >>>> + * License along with FFmpeg; if not, write to the Free Software >>>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >>>> USA + */ >>>> + >>>> +#ifndef AVUTIL_LOONGARCH_TIMER_H >>>> +#define AVUTIL_LOONGARCH_TIMER_H >>>> + >>>> +#include <stdint.h> >>>> +#include "config.h" >>>> + >>>> +#if HAVE_INLINE_ASM >>>> + >>>> +#define AV_READ_TIME read_time >>>> + >>>> +static inline uint64_t read_time(void) >>>> +{ >>>> + >>>> +#if ARCH_LOONGARCH64 >>>> + uint64_t a, id = 0; >>> Initial value is never used. >>> >>>> + __asm__ volatile ( "rdtime.d %0, %1" : "=r"(a), "=r"(id) :: "memory" >>>> ); + return a; >>>> +#else >>>> + uint32_t a, id = 0; >>>> + __asm__ volatile ( "rdtimel.w %0, %1" : "=r"(a), "=r"(id) :: "memory" >>>> ); + return (uint64_t)a; >>>> +#endif >>> Why do you clobber memory here? >>> >>>> +} >>>> + >>>> +#endif /* HAVE_INLINE_ASM */ >>>> + >>>> +#endif /* AVUTIL_LOONGARCH_TIMER_H */ >>>> diff --git a/libavutil/timer.h b/libavutil/timer.h >>>> index d3db5a27ef..861ba7e9d7 100644 >>>> --- a/libavutil/timer.h >>>> +++ b/libavutil/timer.h >>>> @@ -61,6 +61,8 @@ >>>> # include "riscv/timer.h" >>>> #elif ARCH_X86 >>>> # include "x86/timer.h" >>>> +#elif ARCH_LOONGARCH >>>> +# include "loongarch/timer.h" >>>> #endif >>>> >>>> #if !defined(AV_READ_TIME) >>>> >>> Thanks for your advice. As described in loongarch's instruction manual, the rdtime.d instruction is used as follows: >>> rdtime.d rd, rj. The rj register stores the counter ID. In this application, the value of counter ID is equal to 0. > You're setting a value, zero, to a variable `id`, that is then used as output operand. As far as the compiler is concerned, the value zero is never used and the initialisation can be elided. The value of register %1 is unspecified. > > If you meant for `id` to be an input operand, the constraints are incorrect. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". You are right! Thank you very much for your reminder. I will correct it.
> 2023年5月25日 10:36,Hao Chen <chenhao@loongson.cn> 写道: > > > 在 2023/5/24 下午7:03, Rémi Denis-Courmont 写道: >> >> Le 24 mai 2023 10:39:59 GMT+03:00, Hao Chen <chenhao@loongson.cn> a écrit : >>> 在 2023/5/20 下午5:38, Rémi Denis-Courmont 写道: >>>> Le lauantaina 20. toukokuuta 2023, 10.27.19 EEST Hao Chen a écrit : >>>>> From: yuanhecai <yuanhecai@loongson.cn> >>>>> >>>>> This patch supports the use of the "checkasm --bench" testing feature >>>>> on loongarch platform. >>>>> >>>>> Change-Id: I42790388d057c9ade0dfa38a19d9c1fd44ca0bc3 >>>>> --- >>>>> libavutil/loongarch/timer.h | 48 +++++++++++++++++++++++++++++++++++++ >>>>> libavutil/timer.h | 2 ++ >>>>> 2 files changed, 50 insertions(+) >>>>> create mode 100644 libavutil/loongarch/timer.h >>>>> >>>>> diff --git a/libavutil/loongarch/timer.h b/libavutil/loongarch/timer.h >>>>> new file mode 100644 >>>>> index 0000000000..44ed786409 >>>>> --- /dev/null >>>>> +++ b/libavutil/loongarch/timer.h >>>>> @@ -0,0 +1,48 @@ >>>>> +/* >>>>> + * Copyright (c) 2023 Loongson Technology Corporation Limited >>>>> + * Contributed by Hecai Yuan <yuanhecai@loongson.cn> >>>>> + * >>>>> + * This file is part of FFmpeg. >>>>> + * >>>>> + * FFmpeg is free software; you can redistribute it and/or >>>>> + * modify it under the terms of the GNU Lesser General Public >>>>> + * License as published by the Free Software Foundation; either >>>>> + * version 2.1 of the License, or (at your option) any later version. >>>>> + * >>>>> + * FFmpeg is distributed in the hope that it will be useful, >>>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >>>>> + * Lesser General Public License for more details. >>>>> + * >>>>> + * You should have received a copy of the GNU Lesser General Public >>>>> + * License along with FFmpeg; if not, write to the Free Software >>>>> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 >>>>> USA + */ >>>>> + >>>>> +#ifndef AVUTIL_LOONGARCH_TIMER_H >>>>> +#define AVUTIL_LOONGARCH_TIMER_H >>>>> + >>>>> +#include <stdint.h> >>>>> +#include "config.h" >>>>> + >>>>> +#if HAVE_INLINE_ASM >>>>> + >>>>> +#define AV_READ_TIME read_time >>>>> + >>>>> +static inline uint64_t read_time(void) >>>>> +{ >>>>> + >>>>> +#if ARCH_LOONGARCH64 >>>>> + uint64_t a, id = 0; >>>> Initial value is never used. >>>> >>>>> + __asm__ volatile ( "rdtime.d %0, %1" : "=r"(a), "=r"(id) :: "memory" >>>>> ); + return a; >>>>> +#else >>>>> + uint32_t a, id = 0; >>>>> + __asm__ volatile ( "rdtimel.w %0, %1" : "=r"(a), "=r"(id) :: "memory" >>>>> ); + return (uint64_t)a; >>>>> +#endif >>>> Why do you clobber memory here? >>>> >>>>> +} >>>>> + >>>>> +#endif /* HAVE_INLINE_ASM */ >>>>> + >>>>> +#endif /* AVUTIL_LOONGARCH_TIMER_H */ >>>>> diff --git a/libavutil/timer.h b/libavutil/timer.h >>>>> index d3db5a27ef..861ba7e9d7 100644 >>>>> --- a/libavutil/timer.h >>>>> +++ b/libavutil/timer.h >>>>> @@ -61,6 +61,8 @@ >>>>> # include "riscv/timer.h" >>>>> #elif ARCH_X86 >>>>> # include "x86/timer.h" >>>>> +#elif ARCH_LOONGARCH >>>>> +# include "loongarch/timer.h" >>>>> #endif >>>>> >>>>> #if !defined(AV_READ_TIME) >>>>> >>>> Thanks for your advice. As described in loongarch's instruction manual, the rdtime.d instruction is used as follows: >>>> rdtime.d rd, rj. The rj register stores the counter ID. In this application, the value of counter ID is equal to 0. >> You're setting a value, zero, to a variable `id`, that is then used as output operand. As far as the compiler is concerned, the value zero is never used and the initialisation can be elided. The value of register %1 is unspecified. >> >> If you meant for `id` to be an input operand, the constraints are incorrect. >> > > > You are right! Thank you very much for your reminder. I will correct it. > id is output operand, the constraints is correct, and initilazation of id is not necessary.
diff --git a/libavutil/loongarch/timer.h b/libavutil/loongarch/timer.h new file mode 100644 index 0000000000..44ed786409 --- /dev/null +++ b/libavutil/loongarch/timer.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023 Loongson Technology Corporation Limited + * Contributed by Hecai Yuan <yuanhecai@loongson.cn> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_LOONGARCH_TIMER_H +#define AVUTIL_LOONGARCH_TIMER_H + +#include <stdint.h> +#include "config.h" + +#if HAVE_INLINE_ASM + +#define AV_READ_TIME read_time + +static inline uint64_t read_time(void) +{ + +#if ARCH_LOONGARCH64 + uint64_t a, id = 0; + __asm__ volatile ( "rdtime.d %0, %1" : "=r"(a), "=r"(id) :: "memory" ); + return a; +#else + uint32_t a, id = 0; + __asm__ volatile ( "rdtimel.w %0, %1" : "=r"(a), "=r"(id) :: "memory" ); + return (uint64_t)a; +#endif +} + +#endif /* HAVE_INLINE_ASM */ + +#endif /* AVUTIL_LOONGARCH_TIMER_H */ diff --git a/libavutil/timer.h b/libavutil/timer.h index d3db5a27ef..861ba7e9d7 100644 --- a/libavutil/timer.h +++ b/libavutil/timer.h @@ -61,6 +61,8 @@ # include "riscv/timer.h" #elif ARCH_X86 # include "x86/timer.h" +#elif ARCH_LOONGARCH +# include "loongarch/timer.h" #endif #if !defined(AV_READ_TIME)
From: yuanhecai <yuanhecai@loongson.cn> This patch supports the use of the "checkasm --bench" testing feature on loongarch platform. Change-Id: I42790388d057c9ade0dfa38a19d9c1fd44ca0bc3 --- libavutil/loongarch/timer.h | 48 +++++++++++++++++++++++++++++++++++++ libavutil/timer.h | 2 ++ 2 files changed, 50 insertions(+) create mode 100644 libavutil/loongarch/timer.h