X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fds390%2Fpeeph.def;h=38d81982a41dac746d4b3098d2b0bb0bffcc6789;hb=32f9d7bd4da99c9837bc529a8d847c7c0d873684;hp=7ffbf7103ff32e6f838f7405f35a8bce3aec99fa;hpb=b8c9c88e87db9a9ef680afa7dec0a320c42ccca6;p=fw%2Fsdcc diff --git a/src/ds390/peeph.def b/src/ds390/peeph.def index 7ffbf710..38d81982 100644 --- a/src/ds390/peeph.def +++ b/src/ds390/peeph.def @@ -2707,3 +2707,35 @@ replace { } by { ; Peephole 243b jump optimization } if labelRefCount %1 1 + + +// This allows non-interrupt and interrupt code to safely compete +// for a resource without the non-interrupt code having to disable +// interrupts: +// volatile bit resource_is_free; +// if( resource_is_free ) { +// resource_is_free=0; do_something; resource_is_free=1; +// } +replace { + jnb %1,%2 +%3: + clr %1 +} by { + ; Peephole 244.a using atomic test and clear + jbc %1,%3 + sjmp %2 +%3: +} if labelRefCount %3 0 + +replace { + jb %1,%2 + ljmp %3 +%2: + clr %1 +} by { + ; Peephole 244.b using atomic test and clear + jbc %1,%2 + ljmp %3 +%2: +} if labelRefCount %2 1 +