diff --git a/newlib/Makefile.in b/newlib/Makefile.in index 52b5d80dc0..d29e704631 100644 --- a/newlib/Makefile.in +++ b/newlib/Makefile.in @@ -855,7 +855,7 @@ check_PROGRAMS = @HAVE_LIBC_MACHINE_PRU_TRUE@am__append_113 = libc/machine/pru/setjmp.s @HAVE_LIBC_MACHINE_RISCV_TRUE@am__append_114 = \ -@HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/memmove.S libc/machine/riscv/memmove-stub.c libc/machine/riscv/memset.S libc/machine/riscv/memcpy-asm.S libc/machine/riscv/memcpy.c libc/machine/riscv/strlen.c \ +@HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/memmove-asm.S libc/machine/riscv/memmove.c libc/machine/riscv/memset.S libc/machine/riscv/memcpy-asm.S libc/machine/riscv/memcpy.c libc/machine/riscv/strlen.c \ @HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/strcpy.c libc/machine/riscv/stpcpy.c libc/machine/riscv/strcmp.S libc/machine/riscv/setjmp.S libc/machine/riscv/ieeefp.c libc/machine/riscv/ffs.c @HAVE_LIBC_MACHINE_RL78_TRUE@am__append_115 = libc/machine/rl78/setjmp.S @@ -2176,8 +2176,8 @@ am__objects_51 = libc/ssp/libc_a-chk_fail.$(OBJEXT) \ @HAVE_LIBC_MACHINE_POWERPC_TRUE@@HAVE_POWERPC_SPE_TRUE@ libc/machine/powerpc/libc_a-vfprintf.$(OBJEXT) \ @HAVE_LIBC_MACHINE_POWERPC_TRUE@@HAVE_POWERPC_SPE_TRUE@ libc/machine/powerpc/libc_a-vfscanf.$(OBJEXT) @HAVE_LIBC_MACHINE_PRU_TRUE@am__objects_123 = libc/machine/pru/libc_a-setjmp.$(OBJEXT) -@HAVE_LIBC_MACHINE_RISCV_TRUE@am__objects_124 = libc/machine/riscv/libc_a-memmove.$(OBJEXT) \ -@HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/libc_a-memmove-stub.$(OBJEXT) \ +@HAVE_LIBC_MACHINE_RISCV_TRUE@am__objects_124 = libc/machine/riscv/libc_a-memmove-asm.$(OBJEXT) \ +@HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/libc_a-memmove.$(OBJEXT) \ @HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/libc_a-memset.$(OBJEXT) \ @HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/libc_a-memcpy-asm.$(OBJEXT) \ @HAVE_LIBC_MACHINE_RISCV_TRUE@ libc/machine/riscv/libc_a-memcpy.$(OBJEXT) \ @@ -4002,7 +4002,6 @@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ -runstatedir = @runstatedir@ sbindir = @sbindir@ shared_machine_dir = @shared_machine_dir@ sharedstatedir = @sharedstatedir@ @@ -9158,10 +9157,10 @@ libc/machine/riscv/$(am__dirstamp): libc/machine/riscv/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) libc/machine/riscv/$(DEPDIR) @: > libc/machine/riscv/$(DEPDIR)/$(am__dirstamp) -libc/machine/riscv/libc_a-memmove.$(OBJEXT): \ +libc/machine/riscv/libc_a-memmove-asm.$(OBJEXT): \ libc/machine/riscv/$(am__dirstamp) \ libc/machine/riscv/$(DEPDIR)/$(am__dirstamp) -libc/machine/riscv/libc_a-memmove-stub.$(OBJEXT): \ +libc/machine/riscv/libc_a-memmove.$(OBJEXT): \ libc/machine/riscv/$(am__dirstamp) \ libc/machine/riscv/$(DEPDIR)/$(am__dirstamp) libc/machine/riscv/libc_a-memset.$(OBJEXT): \ @@ -13141,7 +13140,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-ieeefp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-memcpy-asm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-memcpy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-memset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/riscv/$(DEPDIR)/libc_a-setjmp.Po@am__quote@ @@ -19165,19 +19164,19 @@ libc/machine/powerpc/libc_a-setjmp.obj: libc/machine/powerpc/setjmp.S @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/powerpc/libc_a-setjmp.obj `if test -f 'libc/machine/powerpc/setjmp.S'; then $(CYGPATH_W) 'libc/machine/powerpc/setjmp.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/powerpc/setjmp.S'; fi` -libc/machine/riscv/libc_a-memmove.o: libc/machine/riscv/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/riscv/libc_a-memmove.o -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/riscv/libc_a-memmove.o `test -f 'libc/machine/riscv/memmove.S' || echo '$(srcdir)/'`libc/machine/riscv/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/riscv/memmove.S' object='libc/machine/riscv/libc_a-memmove.o' libtool=no @AMDEPBACKSLASH@ +libc/machine/riscv/libc_a-memmove-asm.o: libc/machine/riscv/memmove-asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/riscv/libc_a-memmove-asm.o -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Tpo -c -o libc/machine/riscv/libc_a-memmove-asm.o `test -f 'libc/machine/riscv/memmove-asm.S' || echo '$(srcdir)/'`libc/machine/riscv/memmove-asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/riscv/memmove-asm.S' object='libc/machine/riscv/libc_a-memmove-asm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/riscv/libc_a-memmove.o `test -f 'libc/machine/riscv/memmove.S' || echo '$(srcdir)/'`libc/machine/riscv/memmove.S +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/riscv/libc_a-memmove-asm.o `test -f 'libc/machine/riscv/memmove-asm.S' || echo '$(srcdir)/'`libc/machine/riscv/memmove-asm.S -libc/machine/riscv/libc_a-memmove.obj: libc/machine/riscv/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/riscv/libc_a-memmove.obj -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/riscv/libc_a-memmove.obj `if test -f 'libc/machine/riscv/memmove.S'; then $(CYGPATH_W) 'libc/machine/riscv/memmove.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove.S'; fi` -@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/riscv/memmove.S' object='libc/machine/riscv/libc_a-memmove.obj' libtool=no @AMDEPBACKSLASH@ +libc/machine/riscv/libc_a-memmove-asm.obj: libc/machine/riscv/memmove-asm.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/riscv/libc_a-memmove-asm.obj -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Tpo -c -o libc/machine/riscv/libc_a-memmove-asm.obj `if test -f 'libc/machine/riscv/memmove-asm.S'; then $(CYGPATH_W) 'libc/machine/riscv/memmove-asm.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove-asm.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove-asm.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/riscv/memmove-asm.S' object='libc/machine/riscv/libc_a-memmove-asm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/riscv/libc_a-memmove.obj `if test -f 'libc/machine/riscv/memmove.S'; then $(CYGPATH_W) 'libc/machine/riscv/memmove.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove.S'; fi` +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/riscv/libc_a-memmove-asm.obj `if test -f 'libc/machine/riscv/memmove-asm.S'; then $(CYGPATH_W) 'libc/machine/riscv/memmove-asm.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove-asm.S'; fi` libc/machine/riscv/libc_a-memset.o: libc/machine/riscv/memset.S @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/riscv/libc_a-memset.o -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memset.Tpo -c -o libc/machine/riscv/libc_a-memset.o `test -f 'libc/machine/riscv/memset.S' || echo '$(srcdir)/'`libc/machine/riscv/memset.S @@ -34749,19 +34748,19 @@ libc/machine/powerpc/libc_a-ufix64toa.obj: libc/machine/powerpc/ufix64toa.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/powerpc/libc_a-ufix64toa.obj `if test -f 'libc/machine/powerpc/ufix64toa.c'; then $(CYGPATH_W) 'libc/machine/powerpc/ufix64toa.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/powerpc/ufix64toa.c'; fi` -libc/machine/riscv/libc_a-memmove-stub.o: libc/machine/riscv/memmove-stub.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/riscv/libc_a-memmove-stub.o -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Tpo -c -o libc/machine/riscv/libc_a-memmove-stub.o `test -f 'libc/machine/riscv/memmove-stub.c' || echo '$(srcdir)/'`libc/machine/riscv/memmove-stub.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/riscv/memmove-stub.c' object='libc/machine/riscv/libc_a-memmove-stub.o' libtool=no @AMDEPBACKSLASH@ +libc/machine/riscv/libc_a-memmove.o: libc/machine/riscv/memmove.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/riscv/libc_a-memmove.o -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/riscv/libc_a-memmove.o `test -f 'libc/machine/riscv/memmove.c' || echo '$(srcdir)/'`libc/machine/riscv/memmove.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/riscv/memmove.c' object='libc/machine/riscv/libc_a-memmove.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/riscv/libc_a-memmove-stub.o `test -f 'libc/machine/riscv/memmove-stub.c' || echo '$(srcdir)/'`libc/machine/riscv/memmove-stub.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/riscv/libc_a-memmove.o `test -f 'libc/machine/riscv/memmove.c' || echo '$(srcdir)/'`libc/machine/riscv/memmove.c -libc/machine/riscv/libc_a-memmove-stub.obj: libc/machine/riscv/memmove-stub.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/riscv/libc_a-memmove-stub.obj -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Tpo -c -o libc/machine/riscv/libc_a-memmove-stub.obj `if test -f 'libc/machine/riscv/memmove-stub.c'; then $(CYGPATH_W) 'libc/machine/riscv/memmove-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove-stub.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove-stub.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/riscv/memmove-stub.c' object='libc/machine/riscv/libc_a-memmove-stub.obj' libtool=no @AMDEPBACKSLASH@ +libc/machine/riscv/libc_a-memmove.obj: libc/machine/riscv/memmove.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/riscv/libc_a-memmove.obj -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/riscv/libc_a-memmove.obj `if test -f 'libc/machine/riscv/memmove.c'; then $(CYGPATH_W) 'libc/machine/riscv/memmove.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/riscv/$(DEPDIR)/libc_a-memmove.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/riscv/memmove.c' object='libc/machine/riscv/libc_a-memmove.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/riscv/libc_a-memmove-stub.obj `if test -f 'libc/machine/riscv/memmove-stub.c'; then $(CYGPATH_W) 'libc/machine/riscv/memmove-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove-stub.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/riscv/libc_a-memmove.obj `if test -f 'libc/machine/riscv/memmove.c'; then $(CYGPATH_W) 'libc/machine/riscv/memmove.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/riscv/memmove.c'; fi` libc/machine/riscv/libc_a-memcpy.o: libc/machine/riscv/memcpy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/riscv/libc_a-memcpy.o -MD -MP -MF libc/machine/riscv/$(DEPDIR)/libc_a-memcpy.Tpo -c -o libc/machine/riscv/libc_a-memcpy.o `test -f 'libc/machine/riscv/memcpy.c' || echo '$(srcdir)/'`libc/machine/riscv/memcpy.c diff --git a/newlib/libc/machine/riscv/Makefile.inc b/newlib/libc/machine/riscv/Makefile.inc index 4d6c0469ab..ffc71339d2 100644 --- a/newlib/libc/machine/riscv/Makefile.inc +++ b/newlib/libc/machine/riscv/Makefile.inc @@ -1,3 +1,3 @@ libc_a_SOURCES += \ - %D%/memmove.S %D%/memmove-stub.c %D%/memset.S %D%/memcpy-asm.S %D%/memcpy.c %D%/strlen.c \ + %D%/memmove-asm.S %D%/memmove.c %D%/memset.S %D%/memcpy-asm.S %D%/memcpy.c %D%/strlen.c \ %D%/strcpy.c %D%/stpcpy.c %D%/strcmp.S %D%/setjmp.S %D%/ieeefp.c %D%/ffs.c diff --git a/newlib/libc/machine/riscv/memmove.S b/newlib/libc/machine/riscv/memmove-asm.S similarity index 100% rename from newlib/libc/machine/riscv/memmove.S rename to newlib/libc/machine/riscv/memmove-asm.S diff --git a/newlib/libc/machine/riscv/memmove-stub.c b/newlib/libc/machine/riscv/memmove-stub.c deleted file mode 100644 index d882e46c14..0000000000 --- a/newlib/libc/machine/riscv/memmove-stub.c +++ /dev/null @@ -1,14 +0,0 @@ -/* Copyright (c) 2019 SiFive Inc. All rights reserved. - - This copyrighted material is made available to anyone wishing to use, - modify, copy, or redistribute it subject to the terms and conditions - of the FreeBSD License. This program is distributed in the hope that - it will be useful, but WITHOUT ANY WARRANTY expressed or implied, - including the implied warranties of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. A copy of this license is available at - http://www.opensource.org/licenses. -*/ - -#if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) -#include "../../string/memmove.c" -#endif diff --git a/newlib/libc/machine/riscv/memmove.c b/newlib/libc/machine/riscv/memmove.c new file mode 100644 index 0000000000..05ba847aec --- /dev/null +++ b/newlib/libc/machine/riscv/memmove.c @@ -0,0 +1,232 @@ +/* Copyright (c) 2019 SiFive Inc. All rights reserved. + Copyright (c) 2025 Marlene Fally + + This copyrighted material is made available to anyone wishing to use, + modify, copy, or redistribute it subject to the terms and conditions + of the FreeBSD License. This program is distributed in the hope that + it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + including the implied warranties of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. A copy of this license is available at + http://www.opensource.org/licenses. +*/ + +#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__) +/* memmove defined in memmove-asm.S */ +#else + +#include "../../string/local.h" +#include "sys/asm.h" +#include "xlenint.h" +#include +#include +#include + +static inline uint8_t +__libc_fast_xlen_aligned (void *dst, const void *src) +{ +#if defined(__riscv_misaligned_fast) + return 1; +#else + return !(((uintxlen_t)src & (SZREG - 1)) | ((uintxlen_t)dst & (SZREG - 1))); +#endif +} + +#if !defined(__riscv_misaligned_fast) +static inline void +__libc_memmove_misaligned_copy (unsigned char *dst, + const uintxlen_t *aligned_src) +{ + uintxlen_t src_xlen = *aligned_src; + + *dst++ = (unsigned char)(src_xlen); + *dst++ = (unsigned char)(src_xlen >> 8); + *dst++ = (unsigned char)(src_xlen >> 16); + *dst++ = (unsigned char)(src_xlen >> 24); +#if __riscv_xlen == 64 + *dst++ = (unsigned char)(src_xlen >> 32); + *dst++ = (unsigned char)(src_xlen >> 40); + *dst++ = (unsigned char)(src_xlen >> 48); + *dst++ = (unsigned char)(src_xlen >> 56); +#endif +} +#endif + +static inline void +__libc_aligned_copy_unrolled (uintxlen_t *aligned_dst, + const uintxlen_t *aligned_src) +{ + uintxlen_t dst0 = *aligned_src++; + uintxlen_t dst1 = *aligned_src++; + uintxlen_t dst2 = *aligned_src++; + uintxlen_t dst3 = *aligned_src++; + uintxlen_t dst4 = *aligned_src++; + uintxlen_t dst5 = *aligned_src++; + uintxlen_t dst6 = *aligned_src++; + uintxlen_t dst7 = *aligned_src++; + uintxlen_t dst8 = *aligned_src; + + *aligned_dst++ = dst0; + *aligned_dst++ = dst1; + *aligned_dst++ = dst2; + *aligned_dst++ = dst3; + *aligned_dst++ = dst4; + *aligned_dst++ = dst5; + *aligned_dst++ = dst6; + *aligned_dst++ = dst7; + *aligned_dst = dst8; +} + +void *__inhibit_loop_to_libcall +memmove (void *dst_void, const void *src_void, size_t length) +{ + unsigned char *dst = dst_void; + const unsigned char *src = src_void; + uintxlen_t *aligned_dst; + const uintxlen_t *aligned_src; + + if (src < dst && dst < src + length) + { + /* Destructive overlap...have to copy backwards */ + src += length; + dst += length; + + if (length >= SZREG) + { + if (__libc_fast_xlen_aligned (dst, src)) + { + aligned_dst = (uintxlen_t *)dst; + aligned_src = (uintxlen_t *)src; + + /* If possible, unroll the word-copy loop by a factor 9 to + match memcpy. This speeds up the copying process for longer + lengths while not degrading performance for lengths < SZREG*9. + Since we are copying backwards, decrement the addresses + before copying. + */ + while (length >= SZREG * 9) + { + aligned_dst -= 9; + aligned_src -= 9; + __libc_aligned_copy_unrolled (aligned_dst, aligned_src); + length -= (SZREG * 9); + } + + while (length >= SZREG) + { + *--aligned_dst = *--aligned_src; + length -= SZREG; + } + + /* Pick up any residual with a byte copier. */ + dst = (unsigned char *)aligned_dst; + src = (unsigned char *)aligned_src; + } +#if !defined(__riscv_misaligned_fast) + else if (length > (SZREG * 2)) + { + /* At least one address is not xlen-aligned. If + misaligned accesses are slow or prohibited, + align the src so we can load SZREG bytes at a time. + This reduces the amount of memory accesses made + and therefore improves performance. + */ + while ((uintxlen_t)src & (SZREG - 1)) + { + *--dst = *--src; + length--; + } + + aligned_src = (uintxlen_t *)src; + + /* Decrement the addresses before copying since + we are copying backwards. */ + do + { + aligned_src--; + dst -= SZREG; + __libc_memmove_misaligned_copy (dst, aligned_src); + length -= SZREG; + } + while (length >= SZREG); + + /* Pick up any residual with a byte copier. */ + src = (unsigned char *)aligned_src; + } +#endif + } + while (length--) + { + *--dst = *--src; + } + } + else /* Memory areas overlap non-destructively or not at all. */ + { + if (length >= SZREG) + { + if (__libc_fast_xlen_aligned (dst, src)) + { + aligned_dst = (uintxlen_t *)dst; + aligned_src = (uintxlen_t *)src; + + /* If possible, unroll the word-copy loop by a factor 9 to + match memcpy. This speeds up the copying process for longer + lengths while not degrading performance for lengths < SZREG*9. + */ + while (length >= SZREG * 9) + { + __libc_aligned_copy_unrolled (aligned_dst, aligned_src); + aligned_dst += 9; + aligned_src += 9; + length -= (SZREG * 9); + } + + while (length >= SZREG) + { + *aligned_dst++ = *aligned_src++; + length -= SZREG; + } + + /* Pick up any residual with a byte copier. */ + dst = (unsigned char *)aligned_dst; + src = (unsigned char *)aligned_src; + } +#if !defined(__riscv_misaligned_fast) + else if (length > (SZREG * 2)) + { + /* At least one address is not xlen-aligned. If + misaligned accesses are slow or prohibited, + align the src so we can load SZREG bytes at a time. + This reduces the amount of memory accesses made + and therefore improves performance. + */ + while ((uintxlen_t)src & (SZREG - 1)) + { + *dst++ = *src++; + length--; + } + + aligned_src = (uintxlen_t *)src; + + do + { + __libc_memmove_misaligned_copy (dst, aligned_src); + aligned_src++; + dst += SZREG; + length -= SZREG; + } + while (length >= SZREG); + + /* Pick up any residual with a byte copier. */ + src = (unsigned char *)aligned_src; + } +#endif + } + while (length--) + { + *dst++ = *src++; + } + } + + return dst_void; +} +#endif