M-profile cores manage interrupts differently from classic cores
and lack the FIQ. Split the interrupt management parts out into
separate headers but keep the endian swapping routines (which are
not profile-dependent) in the common system-arm header.
The initial part of the vector table is common to all Cortex-M
CPUs and is intended to be included by the target linker script,
with the vendor-specific part of the vector table appended to it.
Change-Id: Ib2ad5b9dc41db27940e39033cfef4308923db66d
On Cortex-M we can just return SP directly, which will return
PSP/MSP depending on the current processor mode.
Note that unwarminder doesn't handle Cortex-M exception frames
yet, so a panic from an interrupt handler will currently stop
at the exception boundary.
Change-Id: I8818126c065c896d781bd52b877965a4094dee2a
GCC cannot compile the existing assembly here on ARMv7-M,
claiming impossible constraints. It is actually possible to
compile if the input arguments (addresses and sizes) are
first moved to a high register so as not to conflict with
the use of r0-r7 in ldm/stm -- this is exactly what GCC does
for ARMv6, but it won't do it on ARMv7-M for some reason.
We can get a result similar to the ARMv6 code by manually
moving the inputs into temporaries, but the generated code
is a actually a bit smaller on ARMv7-M if the r0-r7 block is
shifted up to r3-r10. This only works since ARMv7-M supports
the 32-bit Thumb encoding -- 16-bit Thumb can't represent an
ldm/stm instruction of this type.
It's worth #ifdef'ing the code because although the ARMv7-M
version works on ARMv6 too, it spills a lot of registers on
the stack even though register use is mostly similar.
Change-Id: I9bc8b5c76e198aecfd0a0e7a2158b1c00f82c4df
On ARMv7-M, stm/ldm instructions can't include SP, so we must
load and store that separately. This changes the order of
registers in the context struct, but it doesn't seem to be
accessed anywhere else so this shouldn't cause any problems.
Change-Id: Ie1cd23272f23384e030f51f0b76739624fa7332b
Commit 1fb906500a ("x1000: LCD DMA fix") caused a regression
on the Q1 by breaking the LCD_X1000_DMA_WAIT_FOR_FRAME logic,
since the wrong branch of lcd_wait_frame() was taken.
Change-Id: Icb44335f506a1a691280de8219188526bb11468f
All the X1000 targets use "fast" sleep, as opposed to the normal
HAVE_LCD_SLEEP define which creates a user-configurable option.
Remove the ifdefs to make the code a bit easier to read.
Change-Id: Ibb80c92a8e23191651fee61fc8cf6f4e4fac8750
Looks like they were always off-by-one, so the wrong functions have been used to rectify this bug. This is now properly fixed.
No changes to the ipodnano2g binaries (bootloader, rockbox)
Change-Id: I19fe1b89f9e5d722f7e877d60f68fc3275c3642a
This makes these files compileable, or in some cases less
broken, on Cortex-M targets.
In lcd-16bit.c, newer versions of GAS complain about the
infix condition codes so we use the suffix form instead,
which requires unified syntax to compile on GCC 4.9.
Change-Id: If45166d3fc83d64c692cbb331096a966397aa9e9
ARMv7-M has hardware division, so it doesn't require __div0
or any support functions for 32-bit division.
Change-Id: I840683a1a77d737f378899ca4bcf858216b81014
Add some logic to detect classic and M-profile cores, and make
this info available to the build system. All existing targets
are classic profile.
Change-Id: I07bfcd418bcaa6297b9bbf889fc189f167147428
When the database isn't loaded into RAM,
or the "quick" load setting is enabled,
filenames for tracks must be retrieved
from disk.
With a single track selected, this
can cause a delay before its context
menu is displayed.
Since filenames are only needed after the
user has selected something from the menu,
it makes sense to defer retrieval until
disk access becomes inevitable.
Change-Id: I72b57eff3102b50f3e19441119e20aad903b1f2b
Temporarily enable icons for required lists. Probably not a proper fix but a simple workaround.
Fixes FS#13574
Change-Id: I011a80e2a9f03019927b32e92cd5a35275c051e1
...Its coverage is below the 80% threshold. If anyone complains, they
can help improve the translation coverage first.
Change-Id: I0201497ec1209a7d125ac99ec45de6e2a9e41098
They are hovering at 61% and 73% respectively. Our current cutoff
is 75%, and that should arguably be raied to at least 80%.
If anyone complains we can politely request they help with the
translation.
Change-Id: I39fd0a3b40311669c2a644de8c359a29ae066e75
This way we can set NODEPS from within the makefiles, allowing
the fontzip to be buildable by itself again
Change-Id: Icc4022fef3805b39a97b7bc5d42719ee6522afd1
The new announce_status plugin manual had some errors:
* unescaped '_'
* spurious trailing '}'
Also made the time/date stuff gated behind the 'rtc' option, as
they won't function otherwise.
Change-Id: Iddd49472d4961ed167678ec835e777320570024a
-1 could be supplied unintentionally from user code when utf8_size is computable value
Fixup for 004304dc and 1f548f74
Change-Id: I93008ea289bdb134f051975c25b0db9d0e64b823
For some reason it caused a crash on asan enabled simulator builds but worked fine otherwise.
Fixup for 0847bcc1 and ac8714dd
Change-Id: Iff1c2779d5fa6889c743cdccd8e1feaf55684394
Before we only fell back for manuals and fonts, whereas
we also needed to fall back for source and voices. Given that
dev builds only produce the actual binaries, just fall back for
everything else.
Change-Id: Ibd84a942d380f69c86ca2243cb2c192de7efd047