<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Agree. I made the patch that way because .thumb directive is separate from function declaration and it is hard to figure out whether some function is arm or thumb. <div class="">You can wrap #ifdef __ARM_ARCH_ISA_THUMB == 2 around the function declaration to pick DEFINE_COMPILERRT_FUNCTION or DEFINE_COMPILER_THUMB_FUNCTION to make the code cleaner, but it will make no functional change.<div class="">I am working on a patch to convert all arm builtins to Thumb if possible. After that, we should have only one function declaration macro in both cases.</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Oct 6, 2014, at 6:17 PM, Saleem Abdulrasool <<a href="mailto:compnerd@compnerd.org" class="">compnerd@compnerd.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><br class="Apple-interchange-newline"><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div class="gmail_quote" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">On Fri, Oct 3, 2014 at 5:18 PM, Steven Wu<span class="Apple-converted-space"> </span><span dir="ltr" class=""><<a href="mailto:stevenwu@apple.com" target="_blank" class="">stevenwu@apple.com</a>></span><span class="Apple-converted-space"> </span>wrote:<br class=""><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">Author: steven_wu<br class="">Date: Fri Oct  3 19:18:59 2014<br class="">New Revision: 219040<br class=""><br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=219040&view=rev" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=219040&view=rev</a><br class="">Log:<br class="">Fix the armv7 thumb builtins on darwin<br class=""><br class="">The arm builtins converted into thumb in r213481 are not working<br class="">on darwin. On apple platforms, .thumb_func directive is required<br class="">to generated correct symbols for thumb functions.<br class=""><br class=""><<a href="rdar://problem/18523605" class="">rdar://problem/18523605</a>><br class=""><br class="">Modified:<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/bswapdi2.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/bswapsi2.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/clzdi2.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/clzsi2.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/divmodsi4.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/divsi3.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/modsi3.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/sync-ops.h<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/udivsi3.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/arm/umodsi3.S<br class="">   <span class="Apple-converted-space"> </span>compiler-rt/trunk/lib/builtins/assembly.h<br class=""></blockquote><div class=""><br class=""></div><div class="">Sorry to resurrect this thread again, but, this makes the code harder to follow IMO.  You are now using DEFINE_COMPILERRT_THUMB_FUNCTION to declare a function that may actually be an ARM function by sinking a similar check to the .thumb into the header.</div><div class=""><br class=""></div><div class="">What happens if someone uses a different check for the .thumb and then uses the THUMB_FUNCTION macro?  Or doesn't use it?  I think that it might be better to hoist the .thumb_func into the implementation so that it is more immediately obvious.</div><div class=""> </div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex;">Modified: compiler-rt/trunk/lib/builtins/arm/bswapdi2.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapdi2.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapdi2.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/bswapdi2.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/bswapdi2.S Fri Oct  3 19:18:59 2014<br class="">@@ -21,7 +21,7 @@<br class=""> // Reverse all the bytes in a 64-bit integer.<br class=""> //<br class="">       <span class="Apple-converted-space"> </span>.p2align 2<br class="">-DEFINE_COMPILERRT_FUNCTION(__bswapdi2)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__bswapdi2)<br class=""> #if __ARM_ARCH < 6<br class="">     // before armv6 does not have "rev" instruction<br class="">     // r2 = rev(r0)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/bswapsi2.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapsi2.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/bswapsi2.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/bswapsi2.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/bswapsi2.S Fri Oct  3 19:18:59 2014<br class="">@@ -21,7 +21,7 @@<br class=""> // Reverse all the bytes in a 32-bit integer.<br class=""> //<br class="">       <span class="Apple-converted-space"> </span>.p2align 2<br class="">-DEFINE_COMPILERRT_FUNCTION(__bswapsi2)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__bswapsi2)<br class=""> #if __ARM_ARCH < 6<br class="">     // before armv6 does not have "rev" instruction<br class="">       <span class="Apple-converted-space"> </span>eor     r1, r0, r0, ror #16<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/clzdi2.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzdi2.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzdi2.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/clzdi2.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/clzdi2.S Fri Oct  3 19:18:59 2014<br class="">@@ -21,7 +21,7 @@<br class=""><br class=""><br class="">       <span class="Apple-converted-space"> </span>.p2align        2<br class="">-DEFINE_COMPILERRT_FUNCTION(__clzdi2)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__clzdi2)<br class=""> #ifdef __ARM_FEATURE_CLZ<br class=""> #ifdef __ARMEB__<br class="">       <span class="Apple-converted-space"> </span>cmp     r0, 0<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/clzsi2.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzsi2.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/clzsi2.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/clzsi2.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/clzsi2.S Fri Oct  3 19:18:59 2014<br class="">@@ -20,7 +20,7 @@<br class=""> #endif<br class=""><br class="">       <span class="Apple-converted-space"> </span>.p2align        2<br class="">-DEFINE_COMPILERRT_FUNCTION(__clzsi2)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__clzsi2)<br class=""> #ifdef __ARM_FEATURE_CLZ<br class="">       <span class="Apple-converted-space"> </span>clz     r0, r0<br class="">       <span class="Apple-converted-space"> </span>JMP(lr)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/divmodsi4.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divmodsi4.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divmodsi4.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/divmodsi4.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/divmodsi4.S Fri Oct  3 19:18:59 2014<br class="">@@ -32,7 +32,7 @@<br class=""> @   value is the quotient, the remainder is placed in the variable.<br class=""><br class="">       <span class="Apple-converted-space"> </span>.p2align 3<br class="">-DEFINE_COMPILERRT_FUNCTION(__divmodsi4)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__divmodsi4)<br class=""> #if __ARM_ARCH_EXT_IDIV__<br class="">       <span class="Apple-converted-space"> </span>tst     r1, r1<br class="">       <span class="Apple-converted-space"> </span>beq     LOCAL_LABEL(divzero)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/divsi3.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divsi3.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/divsi3.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/divsi3.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/divsi3.S Fri Oct  3 19:18:59 2014<br class="">@@ -33,7 +33,7 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_idiv<br class=""> @ int __divsi3(int divident, int divisor)<br class=""> @   Calculate and return the quotient of the (signed) division.<br class=""><br class="">-DEFINE_COMPILERRT_FUNCTION(__divsi3)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__divsi3)<br class=""> #if __ARM_ARCH_EXT_IDIV__<br class="">   <span class="Apple-converted-space"> </span>tst     r1,r1<br class="">   <span class="Apple-converted-space"> </span>beq     LOCAL_LABEL(divzero)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/modsi3.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/modsi3.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/modsi3.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/modsi3.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/modsi3.S Fri Oct  3 19:18:59 2014<br class="">@@ -30,7 +30,7 @@<br class=""> @   Calculate and return the remainder of the (signed) division.<br class=""><br class="">       <span class="Apple-converted-space"> </span>.p2align 3<br class="">-DEFINE_COMPILERRT_FUNCTION(__modsi3)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__modsi3)<br class=""> #if __ARM_ARCH_EXT_IDIV__<br class="">       <span class="Apple-converted-space"> </span>tst     r1, r1<br class="">       <span class="Apple-converted-space"> </span>beq     LOCAL_LABEL(divzero)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/sync-ops.h<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/sync-ops.h?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/sync-ops.h?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/sync-ops.h (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/sync-ops.h Fri Oct  3 19:18:59 2014<br class="">@@ -19,7 +19,7 @@<br class="">         .p2align 2 ; \<br class="">         .thumb ; \<br class="">         .syntax unified ; \<br class="">-        DEFINE_COMPILERRT_FUNCTION(__sync_fetch_and_ ## op) \<br class="">+        DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_ ## op) \<br class="">         dmb ; \<br class="">         mov r12, r0 ; \<br class="">         LOCAL_LABEL(tryatomic_ ## op): \<br class="">@@ -35,7 +35,7 @@<br class="">         .p2align 2 ; \<br class="">         .thumb ; \<br class="">         .syntax unified ; \<br class="">-        DEFINE_COMPILERRT_FUNCTION(__sync_fetch_and_ ## op) \<br class="">+        DEFINE_COMPILERRT_THUMB_FUNCTION(__sync_fetch_and_ ## op) \<br class="">         push {r4, r5, r6, lr} ; \<br class="">         dmb ; \<br class="">         mov r12, r0 ; \<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/udivmodsi4.S Fri Oct  3 19:18:59 2014<br class="">@@ -27,7 +27,7 @@<br class=""> @   value is the quotient, the remainder is placed in the variable.<br class=""><br class="">       <span class="Apple-converted-space"> </span>.p2align 2<br class="">-DEFINE_COMPILERRT_FUNCTION(__udivmodsi4)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__udivmodsi4)<br class=""> #if __ARM_ARCH_EXT_IDIV__<br class="">       <span class="Apple-converted-space"> </span>tst     r1, r1<br class="">       <span class="Apple-converted-space"> </span>beq     LOCAL_LABEL(divby0)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/udivsi3.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivsi3.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/udivsi3.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/udivsi3.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/udivsi3.S Fri Oct  3 19:18:59 2014<br class="">@@ -27,7 +27,7 @@ DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_uidi<br class=""> @ unsigned int __udivsi3(unsigned int divident, unsigned int divisor)<br class=""> @   Calculate and return the quotient of the (unsigned) division.<br class=""><br class="">-DEFINE_COMPILERRT_FUNCTION(__udivsi3)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__udivsi3)<br class=""> #if __ARM_ARCH_EXT_IDIV__<br class="">       <span class="Apple-converted-space"> </span>tst     r1, r1<br class="">       <span class="Apple-converted-space"> </span>beq     LOCAL_LABEL(divby0)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/arm/umodsi3.S<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/umodsi3.S?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/arm/umodsi3.S?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/arm/umodsi3.S (original)<br class="">+++ compiler-rt/trunk/lib/builtins/arm/umodsi3.S Fri Oct  3 19:18:59 2014<br class="">@@ -24,7 +24,7 @@<br class=""> @   Calculate and return the remainder of the (unsigned) division.<br class=""><br class="">       <span class="Apple-converted-space"> </span>.p2align 2<br class="">-DEFINE_COMPILERRT_FUNCTION(__umodsi3)<br class="">+DEFINE_COMPILERRT_THUMB_FUNCTION(__umodsi3)<br class=""> #if __ARM_ARCH_EXT_IDIV__<br class="">       <span class="Apple-converted-space"> </span>tst     r1, r1<br class="">       <span class="Apple-converted-space"> </span>beq     LOCAL_LABEL(divby0)<br class=""><br class="">Modified: compiler-rt/trunk/lib/builtins/assembly.h<br class="">URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/assembly.h?rev=219040&r1=219039&r2=219040&view=diff" target="_blank" class="">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/builtins/assembly.h?rev=219040&r1=219039&r2=219040&view=diff</a><br class="">==============================================================================<br class="">--- compiler-rt/trunk/lib/builtins/assembly.h (original)<br class="">+++ compiler-rt/trunk/lib/builtins/assembly.h Fri Oct  3 19:18:59 2014<br class="">@@ -28,6 +28,10 @@<br class=""> // tell linker it can break up file at label boundaries<br class=""> #define FILE_LEVEL_DIRECTIVE .subsections_via_symbols<br class=""> #define SYMBOL_IS_FUNC(name)<br class="">+// <a href="rdar://problem/18523605" class="">rdar://problem/18523605</a><br class="">+#if __ARM_ARCH_ISA_THUMB == 2<br class="">+#define THUMB_FUNC .thumb_func<br class="">+#endif<br class=""> #elif defined(__ELF__)<br class=""> #define HIDDEN(name) .hidden name<br class=""> #define LOCAL_LABEL(name) .L_##name<br class="">@@ -97,6 +101,14 @@<br class="">   SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR                                  \<br class="">   DECLARE_SYMBOL_VISIBILITY(name)                                              \<br class="">   SYMBOL_NAME(name):<br class="">+<br class="">+#define DEFINE_COMPILERRT_THUMB_FUNCTION(name)                                 \<br class="">+  FILE_LEVEL_DIRECTIVE SEPARATOR                                               \<br class="">+  .globl SYMBOL_NAME(name) SEPARATOR                                           \<br class="">+  THUMB_FUNC                                                                   \<br class="">+  SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR                                  \<br class="">+  DECLARE_SYMBOL_VISIBILITY(name)                                              \<br class="">+  SYMBOL_NAME(name):<br class=""><br class=""> #define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name)                               \<br class="">   FILE_LEVEL_DIRECTIVE SEPARATOR                                               \<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@cs.uiuc.edu" class="">llvm-commits@cs.uiuc.edu</a><br class=""><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br class=""></blockquote></div><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br clear="all" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">--<span class="Apple-converted-space"> </span></span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Saleem Abdulrasool</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">compnerd (at) compnerd (dot) org</span></div></blockquote></div><br class=""></div></div></body></html>