I have a piece of C code, if(u3Varaible0 > u3Variable2) { #ifdef DEF_SOMETHING . . #else . . #endif } else { . . . } The variable length of u3Varaible0 is 3 bytes. I don't want to declare it as "unsigned long"(inorder to save onchip memory and reduce execution cycles), So I have to write this piece C code into asm code look like CLR C MOV Au3Varaible0_L SUBB A,u3Variable2_L MOV Au3Varaible0_M SUBB A,u3Variable2_M MOV Au3Varaible0_H SUBB A,u3Variable2_H JC C0049 . . . . C0049: . . . I want it be a macro(inorder to reduce execution cycles). But now comes the problem: 1. If I write this code as a asm macro in an asm source. I just can't use this macro from a C code. 2. If I try to write is as C macro using #define, It is impossible to use inline assembly in the macro!! 3. #ifdef DEF_SOMETHING will also cause an error in #define macro Does anyone know another good way to solve this fine tune problem?