X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=doc%2Fsdccman.lyx;h=0f7777dd9c22f1b17b5a9b97aaf5768122f23e7f;hb=3a3ad5f21d40c9e0e8fbd4e7dcf428bff9cf4c42;hp=c4ce3eba5665fbec3744787ae389bbd7b950254f;hpb=ee76e2f5985c5917392f3f6ea121db57a9e314ce;p=fw%2Fsdcc diff --git a/doc/sdccman.lyx b/doc/sdccman.lyx index c4ce3eba..0f7777dd 100644 --- a/doc/sdccman.lyx +++ b/doc/sdccman.lyx @@ -6122,6 +6122,33 @@ file"'. Like `-dD' except that the macro arguments and contents are omitted. Only `#define name' is included in the output. \layout List +\labelwidthstring 00.00.0000 + + +\series bold +-pedantic-parse-number +\begin_inset LatexCommand \index{-pedantic-parse-number} + +\end_inset + + +\size large +\bar under + +\series default +\size default +\bar default +Pedentic parse numbers so that situations like 0xfe-LO_B(3) are parsed properly + and the macro LO_B(3) gets expanded. + See also #pragma pedantic_parse_number in section +\begin_inset LatexCommand \ref{sec:Pragmas} + +\end_inset + + +\emph on +Note: this functionality is not in conformance with standard! +\layout List \added_space_bottom bigskip \labelwidthstring 00.00.0000 @@ -6164,7 +6191,7 @@ gcc \end_inset ), if you need more dedicated options please refer to the GCC\SpecialChar ~ -3.3.6\SpecialChar ~ +4.1.1\SpecialChar ~ CPP\SpecialChar ~ Manual at @@ -16068,21 +16095,22 @@ As of SDCC 2.6.2 you no longer need to call an initialization routine before \end_inset space of 1024 bytes is provided for malloc to allocate memory from. - -\family default -If you need a different heap size you need to recompile _heap.c with the - required size defined in HEAP_SIZE. It is recommended to make a copy of this - file into your project directory and compile it there with: + If you need a different heap size you need to recompile _heap.c with the + required size defined in HEAP_SIZE. + It is recommended to make a copy of this file into your project directory + and compile it there with: \layout Verse \family typewriter sdcc -c _heap.c -D HEAD_SIZE=2048 \newline + \family default And then link it with: \layout Verse + \family typewriter sdcc main.rel _heap.rel \newline @@ -16885,6 +16913,62 @@ The preprocessor SDCPP \layout Itemize +\series bold +pedantic_parse_number +\series default + +\begin_inset LatexCommand \index{\#pragma pedantic\_parse\_number} + +\end_inset + + (+ | -) - Pedantic parse numbers so that situations like 0xfe-LO_B(3) are + parsed properly and the macro LO_B(3) gets expanded. + Default is off. + Below is an example on how to use this pragma. + +\emph on + Note: this functionality is not in conformance with standard! +\layout Verse + + +\family typewriter +#pragma pedantic_parse_number + +\begin_inset LatexCommand \index{\#pragma pedantic\_parse\_number} + +\end_inset + + +\newline + +\newline +#define LO_B(x) ((x) & 0xff) +\newline + +\newline +unsigned char foo(void) +\newline +{ +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +unsigned char c=0xfe-LO_B(3); +\newline + +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +return c; +\newline +} +\newline + +\family default + +\layout Itemize + + \series bold preproc_asm \series default @@ -16957,6 +17041,80 @@ void foo (void) } \newline +\layout Itemize + + +\series bold +sdcc_hash +\series default + +\begin_inset LatexCommand \index{\#pragma sdcc\_hash} + +\end_inset + + (+ | -) - Allow "naked" hash in macro definition, for example: +\newline + +\family typewriter +#define DIR_LO(x) #(x & 0xff) +\family default + +\newline +Default is off. + Below is an example on how to use this pragma. +\layout Verse + + +\family typewriter +#pragma preproc_asm + +\newline +#pragma sdcc_hash + +\begin_inset LatexCommand \index{\#pragma sdcc\_hash} + +\end_inset + + +\newline + +\newline +#define ROMCALL(x) +\backslash + +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +mov R6_B3, #(x & 0xff) +\backslash + +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +mov R7_B3, #((x >> 8) & 0xff) +\backslash + +\newline +\SpecialChar ~ +\SpecialChar ~ +\SpecialChar ~ +lcall __romcall +\newline + +\newline +... +\newline +_asm +\newline +ROMCALL(72) +\newline +_endasm; +\newline +... +\newline + +\family default + \layout Standard The pragma's are intended to be used to turn-on or off certain optimizations @@ -17685,19 +17843,13 @@ The linker organizes allocation for the code page and RAM banks. used. The compiler treats all functions of a single C file as being in the same code page unless it is non static. - The compiler treats all local variables of a single C file as being in - the same RAM bank unless it is an extern. \newline \newline To get the best follow these guide lines: \layout Enumerate -make local functions static, as non static functions require code page selection - overhead. -\layout Enumerate - -Make local variables static as extern variables require RAM bank selection +Make local functions static, as non static functions require code page selection overhead. \layout Enumerate @@ -17706,10 +17858,11 @@ For devices that have multiple code pages it is more efficient to use the for the 16F877 use 4 separate files and i.e. for the 16F874 use 2 separate files. This way the linker can put the code for each file into different code - pages and the compiler can allocate reusable variables more efficiently - and there's less page selection overhead. + pages and there's less page selection overhead. +\layout Enumerate + And as for any 8 bit micro (especially for PIC 14 as they have a very simple - instruction set) use 'unsigned char' whereever possible instead of 'int'. + instruction set), use 'unsigned char' whereever possible instead of 'int'. \layout Subsection Creating a device include file @@ -17726,7 +17879,7 @@ For generating a device include file Interrupt code \layout Standard -For the interrupt function, use the keyword 'interrupt' +For the interrupt function, use the keyword '__interrupt' \begin_inset LatexCommand \index{PIC14!interrupt} \end_inset @@ -17738,7 +17891,7 @@ For the interrupt function, use the keyword 'interrupt' \family typewriter -void Intr(void) interrupt 0 +void Intr(void) __interrupt 0 \newline { \newline @@ -17922,6 +18075,45 @@ status Collapsed \end_inset disable (slightly faulty) optimization on pCode +\layout List +\labelwidthstring 00.00.0000 + +- +\begin_inset ERT +status Collapsed + +\layout Standard + +\backslash +/ +\end_inset + +-stack-loc +\begin_inset LatexCommand \index{PIC14!Options!-\/-stack-loc} + +\end_inset + + sets the lowest address of the argument passing stack (defaults to a + suitably large shared databank to reduce BANKSEL overhead) +\layout List +\labelwidthstring 00.00.0000 + +- +\begin_inset ERT +status Collapsed + +\layout Standard + +\backslash +/ +\end_inset + +-stack-size +\begin_inset LatexCommand \index{PIC14!Options!-\/-stack-size} + +\end_inset + + sets the size if the argument passing stack (default: 16, minimum: 4) \layout Subsection The library @@ -18369,7 +18561,7 @@ status Collapsed / \end_inset --stack-model=[model] Used in conjuction with the command above. +-pstack-model=[model] Used in conjuction with the command above. Defines the stack model to be used, valid stack models are : \begin_deeper \layout List @@ -25939,6 +26131,22 @@ Historically there often were long delays between official releases and \end_inset . + A release wiki +\begin_inset LatexCommand \index{wiki} + +\end_inset + + +\begin_inset LatexCommand \index{Release wiki} + +\end_inset + + at +\begin_inset LatexCommand \url{http://sdcc.sf.net/release_wiki/} + +\end_inset + + also holds some information about past and future releases. \layout Section Examples @@ -29581,6 +29789,24 @@ The Code generation phase is (unhappily), entirely MCU dependent and very As mentioned in the optimization section the peep-hole optimizer is rule based system, which can reprogrammed for other MCUs. +\layout Standard + +More information is available in a wiki +\begin_inset LatexCommand \index{wiki} + +\end_inset + + (preliminary link +\begin_inset LatexCommand \url{http://sdcc.sourceforge.net/release_wiki/index.php?page=SDCC+internals+and+porting} + +\end_inset + +) and in the thread +\begin_inset LatexCommand \url{http://sf.net/mailarchive/message.php?msg_id=13954144} + +\end_inset + + . \layout Chapter Compiler internals @@ -29734,7 +29960,12 @@ There are other MCU specific considerations in this phase. Code generation \layout Standard -Figure II gives a table of iCode operations supported by the compiler. +Figure II gives a table of iCode +\begin_inset LatexCommand \index{iCode} + +\end_inset + + operations supported by the compiler. The code generation involves translating these operations into corresponding assembly code for the processor. This sounds overly simple but that is the essence of code generation. @@ -29745,10 +29976,1685 @@ Figure II gives a table of iCode operations supported by the compiler. \newline +\layout Standard + + +\size footnotesize +Figure II +\begin_inset Tabular + + + + + + + + +\begin_inset Text + +\layout Standard + + \series bold -\shape italic -\color red - +iCode +\series default + +\begin_inset LatexCommand \index{iCode} + +\end_inset + + +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +Operands +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +Description +\end_inset + + +\begin_inset Text + +\layout Standard + + +\series bold +C Equivalent +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'!' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +NOT operation +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = ! IC_LEFT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'~' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Bitwise complement of +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = ~IC_LEFT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +RRC +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Rotate right with carry +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = (IC_LEFT << 1) | (IC_LEFT >> (sizeof(IC_LEFT)*8-1)); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +RLC +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Rotate left with carry +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = (IC_LEFT << (sizeof(LC_LEFT)*8-1) ) | (IC_LEFT >> 1); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +GETHBIT +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Get the highest order bit of IC_LEFT +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = (IC_LEFT >> (sizeof(IC_LEFT)*8 -1)); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +UNARYMINUS +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Unary minus +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = - IC_LEFT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IPUSH +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Push the operand into stack +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +NONE +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IPOP +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Pop the operand from the stack +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +NONE +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +CALL +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Call the function represented by IC_LEFT +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT(); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +PCALL +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Call via function pointer +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = (*IC_LEFT)(); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +RETURN +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Return the value in operand IC_LEFT +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +return IC_LEFT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +LABEL +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LABEL() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Label +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LABEL: +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +GOTO +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LABEL() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Goto label +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +goto IC_LABEL(); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'+' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Addition +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT + IC_RIGHT +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'-' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Subtraction +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT - IC_RIGHT +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'*' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Multiplication +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT * IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'/' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Division +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT / IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'%' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Modulus +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT % IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'<' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Less than +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT < IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'>' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Greater than +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT > IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +EQ_OP +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Equal to +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT == IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +AND_OP +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Logical and operation +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT && IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +OR_OP +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Logical or operation +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT || IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'^' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Exclusive OR +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT ^ IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'|' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Bitwise OR +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT | IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +BITWISEAND +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Bitwise AND +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT & IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +LEFT_OP +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Left shift +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT << IC_RIGHT +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +RIGHT_OP +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Right shift +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_LEFT >> IC_RIGHT +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +GET_VALUE_ +\newline +AT_ ADDRESS +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Indirect fetch +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = (*IC_LEFT); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +POINTER_SET +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Indirect set +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +(*IC_RESULT) = IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +'=' +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RIGHT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Assignment +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IFX +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_COND IC_TRUE IC_LABEL +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Conditional jump. + If true label is present then jump to true label if condition is true else + jump to false label if condition is false +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +if (IC_COND) goto IC_TRUE; +\newline +\SpecialChar ~ +\SpecialChar ~ +Or +\newline +If (!IC_COND) goto IC_FALSE; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +ADDRESS_OF +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Address of +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = &IC_LEFT(); +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +JUMPTABLE +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_JTCOND IC_JTLABELS +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Jump to list of labels depending on the value of JTCOND +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Switch statement +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +CAST +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RIGHT() IC_LEFT() IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +Cast types +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT = (typeof IC_LEFT) IC_RIGHT; +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +SEND +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_LEFT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +This is used for passing parameters in registers; +\newline +move IC_LEFT to the next available parameter register. +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +None +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +RECV +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +IC_RESULT() +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +This is used for receiving parameters passed in registers; +\newline +Move the values in the next parameter register to IC_RESULT +\end_inset + + +\begin_inset Text + +\layout Standard + + +\size footnotesize +None +\end_inset + + + + +\begin_inset Text + +\layout Standard + + +\shape slanted +\size footnotesize +(some more have been added) +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + +\begin_inset Text + +\layout Standard + +\end_inset + + +\begin_inset Text + +\layout Standard + + +\shape slanted +\size footnotesize +see f.e. + +\family typewriter +gen51Code() +\family default + in +\family typewriter +src/mcs51/gen.c +\end_inset + + + + +\end_inset + + \layout Comment In the original article Figure II was announced to be downloadable on @@ -29756,8 +31662,7 @@ In the original article Figure II was announced to be downloadable on Circuit Cellar \shape default 's web site. - Unfortunately it never seemed to have shown up there, so: where is Figure - II? + ftp://ftp.circuitcellar.com/pub/Circuit_Cellar/2000/121/dutta.ZIP \layout Paragraph* ICode Example