Programming/C Win32 MFC2015. 6. 18. 15:03

느낌적인 느낌으로는 가변인자는 가장 큰 변수형인 void 형을 취할테니..

printf 함수에서 %f를 double로 처리하면서 float에서는 오류가 발생하는 느낌?


아무튼.. 먼가 미묘한 작동을 하네..


[링크 : http://stackoverflow.com/questions/7295066/using-printf-to-print-out-floating-values]

[링크 : http://todayhumor.com/?programmer_11386]

'Programming > C Win32 MFC' 카테고리의 다른 글

void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
gcc 컴파일러 -D 옵션  (0) 2015.05.19
setjmp, longjmp  (0) 2015.05.19
inline 함수..  (0) 2015.05.12
Posted by 구차니

Microsoft Macro ASseMbler

masm (16/32bit) / ml64 (64bit)

[링크 : https://en.wikipedia.org/wiki/Microsoft_Macro_Assembler]

[링크 : https://msdn.microsoft.com/en-us/library/afzk3475.aspx]


nasm

Netwide Assembler

[링크 : http://www.nasm.us/]

[링크 : https://en.wikipedia.org/wiki/Netwide_Assembler]


fasm

[링크 : http://flatassembler.net/]

[링크 : https://en.wikipedia.org/wiki/FASM]




[링크 : http://blog.naver.com/asmpro/220205244661]


'Programming > Assembly(어셈블리)' 카테고리의 다른 글

.text .data .code .bss ...  (0) 2016.02.19
어셈블리 관련  (0) 2015.06.11
ia32 어셈블리 언어  (0) 2013.12.12
.DATA? 지시어  (0) 2011.07.31
x86 register  (2) 2011.07.17
Posted by 구차니

다시 한번 도전!!! 해봐야지 ㅠㅠ


[링크 : http://todayhumor.com/?programmer_5407]

[링크 : http://stackoverflow.com/questions/8304914/difference-between-dword-ptr-and-dword-ptres]

[링크 : http://en.wikipedia.org/wiki/LOADALL]

[링크 : http://bbolmin.tistory.com/82]

'Programming > Assembly(어셈블리)' 카테고리의 다른 글

.text .data .code .bss ...  (0) 2016.02.19
fasm / nasm / masm  (0) 2015.06.13
ia32 어셈블리 언어  (0) 2013.12.12
.DATA? 지시어  (0) 2011.07.31
x86 register  (2) 2011.07.17
Posted by 구차니
Programming/C Win32 MFC2015. 5. 19. 14:35

배치빌드 하거나 할 경우 유용하게 쓰이는 옵션


-D name

Predefine name as a macro, with definition 1. 


-D name=definition

The contents of definition are tokenized and processed as if they appeared during translation phase three in a ‘#define’ directive. In particular, the definition will be truncated by embedded newline characters.

If you are invoking the preprocessor from a shell or shell-like program you may need to use the shell's quoting syntax to protect characters such as spaces that have a meaning in the shell syntax.


If you wish to define a function-like macro on the command line, write its argument list with surrounding parentheses before the equals sign (if any). Parentheses are meaningful to most shells, so you will need to quote the option. With sh and csh, -D'name(args...)=definition' works.


-D and -U options are processed in the order they are given on the command line. All -imacros file and -include file options are processed after all -D and -U options. 


-U name

Cancel any previous definition of name, either built in or provided with a -D option. 


-undef

Do not predefine any system-specific or GCC-specific macros. The standard predefined macros remain defined. 


[링크 : https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html] 


+

Visual studio에서는 /D로 적용된다.

[링크 : https://msdn.microsoft.com/ko-kr/library/teas0593.aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
setjmp, longjmp  (0) 2015.05.19
inline 함수..  (0) 2015.05.12
혼돈의 카오스 - 교차참조 헤더  (0) 2015.05.11
Posted by 구차니
Programming/C Win32 MFC2015. 5. 19. 10:03

setjmp와 longjmp는 함수를 넘나드는(다른 파일도 되려나?) 점프인데

goto 보다 더 위험한(!) 놈이라 잘 쓰지 않도록 되어 있는 것으로 보인다.

게다가 순수 C 구현이 아닌 OS 지원을 받는 넘이라 시스템 별로 다르게 작동 할지도 모른다고 ㄷㄷㄷ


코드로는 jmp_buf 는 점프할 지점을 저장하는 것이고

sizeof로 해보니 200을 뱉어낸다 ㄷㄷ (Ubuntu 12.04 64bit Edition)

PC(Program Counter) 뿐만 아니라 스택을 저장하는 거라 그런가?


코드상으로는 main()의 setjmp를 수행하는 지점이 돌아올 지점이고
longjmp에서 setjmp로 점프!
여러개의 setjmp로 여러 포인트를 잡아놓고
longjmp로 왔다 갔다 가능해 보이긴 하지만.. 까다로울 듯?

$ cat test.c

#include <stdio.h>

#include <setjmp.h>


jmp_buf pos;


void proc()

{

   static int i = 0;


   ++i;

   if(i<10)

       longjmp(pos, i);


   return;

}


int main()

{

   int a;


   a = setjmp(pos);

   printf("%d\n", a);

   proc();

   return 0;

}


[링크 : http://www.jiniya.net/wp/archives/5030]

[링크 : http://egloos.zum.com/studyfoss/v/5275830]


$ ./a.out
0
1
2
3
4
5
6
7
8
9



#include <setjmp.h>

int setjmp(jmp_buf env);

void longjmp(jmp_buf env, int val);


[링크 : http://linux.die.net/man/3/setjmp]

[링크 : http://linux.die.net/man/3/longjmp] 



'Programming > C Win32 MFC' 카테고리의 다른 글

printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
inline 함수..  (0) 2015.05.12
혼돈의 카오스 - 교차참조 헤더  (0) 2015.05.11
#ifdef 와 #ifdef ()의 차이  (0) 2015.04.13
Posted by 구차니



[링크 : http://www.oss.kr/oss_repository6/69515] 정적 분석 툴(오픈소스)

[링크 : http://biglook.tistory.com/16] 행정안전부 JAVA/C 코딩 룰

Posted by 구차니
Programming/Java2015. 5. 12. 16:19

문득 수다 떨다가 검색 -_-

야이!!! FXXKIING 오라클!!!


Is Java still free?

The current version of Java - Java SE 8 - is free and available for redistribution for general purpose computing. Java SE continues to be available under the Oracle Binary Code License (BCL) free of charge. JRE use for embedded devices and other computing environments may require a license fee from Oracle. Read more about embedded use of Java SE or contact your local Oracle sales representative to obtain a license.

[링크 : http://www.oracle.com/technetwork/articles/javase/faqs-jsp-136696.html]


So What Does Java SE-Embedded Cost?


The universal answer to such a question is: it depends.  That is to say it depends upon the capability of the embedded processor.  Before we lose you, let's show the list price for Java embedded licensing associated with three platforms and then explain how we arrived at the numbers.  As of the posting of this entry, 06 December, 2013, here they are:


Per-unit cost for a Raspberry Pi: US $0.71

Per-unit cost for system based on Intel Atom Z510P: US $2.68

Per-unit cost for a Compulab Trim-Slice: US $5.36

[링크 : https://blogs.oracle.com/jtc/entry/java_embedded_pricing_publicly_available]

'Programming > Java' 카테고리의 다른 글

Java SE 8 설치해보려고 했더니..  (2) 2019.01.03
자바 유료화?  (10) 2018.11.05
predefined annotation /java  (0) 2014.06.27
JUnit tutorial  (0) 2014.06.27
java unchecked/checked exception  (0) 2014.05.15
Posted by 구차니
Programming/C Win32 MFC2015. 5. 12. 14:44

프로젝트에서 inline 함수를 다른 파일로 뺴서 하니

없는 함수라고 배째는 현상 발생 -_-


일단 __inline 키워드 빼니 해결되긴 한데..

extern __inline 이렇게 안해줘서 그런가?


[링크 : http://stackoverflow.com/questions/5229343/how-to-declare-an-inline-function-in-c99-multi-file-project]


KEIL

[링크 : http://www.keil.com/forum/13177/]

'Programming > C Win32 MFC' 카테고리의 다른 글

gcc 컴파일러 -D 옵션  (0) 2015.05.19
setjmp, longjmp  (0) 2015.05.19
혼돈의 카오스 - 교차참조 헤더  (0) 2015.05.11
#ifdef 와 #ifdef ()의 차이  (0) 2015.04.13
winUSB / win32 physical drive  (0) 2014.12.23
Posted by 구차니
Programming/C Win32 MFC2015. 5. 11. 12:49

이번에 코드 재정비 중인데...

어우.. 정말 교차참조 하지 않도록 짜아야

수많은 ifdef의 향연에 꼬이는 바람에 뇌가 꽈직꽈직



아무튼 헤더도 계층을 만들어서 하던가 해야지

상호 교차참조 하는 상황에서는 예측 불가능한 상황이 발생할 수 있다.


헤더 중복 방지

[링크 : http://chanywa.com/8]


헤더 hierarchy

[링크 : http://ekessy.tistory.com/33]

'Programming > C Win32 MFC' 카테고리의 다른 글

setjmp, longjmp  (0) 2015.05.19
inline 함수..  (0) 2015.05.12
#ifdef 와 #ifdef ()의 차이  (0) 2015.04.13
winUSB / win32 physical drive  (0) 2014.12.23
printf POSIX 확장 %1$d  (0) 2014.12.09
Posted by 구차니
Programming/neon2015. 5. 6. 22:01

arm-none-linux-gnueabi-gcc -mfpu=neon -ftree-vectorize -c vectorized.c

플래그로 tree-vectorize를 주고

소스에서 __restrict 하면 gcc에서 알아서 neon 코드를 생성해 낸다고 한다.

openmp 를 조금 해봐서 그런가..openmp의 스멜이야 ㅋㅋㅋ


$ vi auto.c

void add_ints(int * __restrict pa, int * __restrict pb, unsigned int n, int x)

{

    unsigned int i;


    for(i = 0; i < (n & ~3); i++)

        pa[i] = pb[i] + x;

}


$ arm-linux-gnueabihf-gcc -mfpu=neon -ftree-vectorize -c auto.c

$ arm-linux-gnueabihf-objdump -D auto.o


auto.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <add_ints>:
   0:   e52db004        push    {fp}            ; (str fp, [sp, #-4]!)
   4:   e28db000        add     fp, sp, #0
   8:   e24dd01c        sub     sp, sp, #28
   c:   e50b0010        str     r0, [fp, #-16]
  10:   e50b1014        str     r1, [fp, #-20]
  14:   e50b2018        str     r2, [fp, #-24]
  18:   e50b301c        str     r3, [fp, #-28]
  1c:   e3a03000        mov     r3, #0
  20:   e50b3008        str     r3, [fp, #-8]
  24:   ea00000e        b       64 <add_ints+0x64>
  28:   e51b3008        ldr     r3, [fp, #-8]
  2c:   e1a03103        lsl     r3, r3, #2
  30:   e51b2010        ldr     r2, [fp, #-16]
  34:   e0823003        add     r3, r2, r3
  38:   e51b2008        ldr     r2, [fp, #-8]
  3c:   e1a02102        lsl     r2, r2, #2
  40:   e51b1014        ldr     r1, [fp, #-20]
  44:   e0812002        add     r2, r1, r2
  48:   e5921000        ldr     r1, [r2]
  4c:   e51b201c        ldr     r2, [fp, #-28]
  50:   e0812002        add     r2, r1, r2
  54:   e5832000        str     r2, [r3]
  58:   e51b3008        ldr     r3, [fp, #-8]
  5c:   e2833001        add     r3, r3, #1
  60:   e50b3008        str     r3, [fp, #-8]
  64:   e51b3018        ldr     r3, [fp, #-24]
  68:   e3c32003        bic     r2, r3, #3
  6c:   e51b3008        ldr     r3, [fp, #-8]
  70:   e1520003        cmp     r2, r3
  74:   8affffeb        bhi     28 <add_ints+0x28>
  78:   e24bd000        sub     sp, fp, #0
  7c:   e49db004        pop     {fp}            ; (ldr fp, [sp], #4)
  80:   e12fff1e        bx      lr

Disassembly of section .comment:

00000000 <.comment>:
   0:   43434700        movtmi  r4, #14080      ; 0x3700
   4:   6328203a        teqvs   r8, #58 ; 0x3a
   8:   73736f72        cmnvc   r3, #456        ; 0x1c8
   c:   6c6f6f74        stclvs  15, cr6, [pc], #-464    ; fffffe44 <add_ints+0xfffffe44>
  10:   20474e2d        subcs   r4, r7, sp, lsr #28
  14:   616e696c        cmnvs   lr, ip, ror #18
  18:   312d6f72        teqcc   sp, r2, ror pc
  1c:   2e33312e        rsfcssp f3, f3, #0.5
  20:   2e342d31        mrccs   13, 1, r2, cr4, cr1, {1}
  24:   30322d38        eorscc  r2, r2, r8, lsr sp
  28:   302e3431        eorcc   r3, lr, r1, lsr r4
  2c:   202d2031        eorcs   r2, sp, r1, lsr r0
  30:   616e694c        cmnvs   lr, ip, asr #18
  34:   47206f72                        ; <UNDEFINED> instruction: 0x47206f72
  38:   32204343        eorcc   r4, r0, #201326593      ; 0xc000001
  3c:   2e333130        mrccs   1, 1, r3, cr3, cr0, {1}
  40:   20293131        eorcs   r3, r9, r1, lsr r1
  44:   2e382e34        mrccs   14, 1, r2, cr8, cr4, {1}
  48:   30322033        eorscc  r2, r2, r3, lsr r0
  4c:   31303431        teqcc   r0, r1, lsr r4
  50:   28203630        stmdacs r0!, {r4, r5, r9, sl, ip, sp}
  54:   72657270        rsbvc   r7, r5, #112, 4
  58:   61656c65        cmnvs   r5, r5, ror #24
  5c:   00296573        eoreq   r6, r9, r3, ror r5

Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:
   0:   00003241        andeq   r3, r0, r1, asr #4
   4:   61656100        cmnvs   r5, r0, lsl #2
   8:   01006962        tsteq   r0, r2, ror #18
   c:   00000028        andeq   r0, r0, r8, lsr #32
  10:   06003605        streq   r3, [r0], -r5, lsl #12
  14:   09010806        stmdbeq r1, {r1, r2, fp}
  18:   0c030a01        stceq   10, cr0, [r3], {1}
  1c:   14041201        strne   r1, [r4], #-513 ; 0x201
  20:   17011501        strne   r1, [r1, -r1, lsl #10]
  24:   19011803        stmdbne r1, {r0, r1, fp, ip}
  28:   1b021a01        blne    86834 <add_ints+0x86834>
  2c:   1e011c03        cdpne   12, 0, cr1, cr1, cr3, {0}
  30:   Address 0x00000030 is out of bounds.


[링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s04s03.html] 


엥? vadd 라던가 이런류의 코드는 안보이는데 -ㅁ-?

라즈베리 파이용 컴파일러가 문제인가?


음.. 해도 안되는데 -ㅁ-? auto vertorize는 안되는건가? ㅠㅠ

-mfpu=name

This specifies what floating-point hardware (or hardware emulation) is available on the target. Permissible names are: ‘vfp’, ‘vfpv3’, ‘vfpv3-fp16’, ‘vfpv3-d16’, ‘vfpv3-d16-fp16’, ‘vfpv3xd’, ‘vfpv3xd-fp16’, ‘neon’, ‘neon-fp16’, ‘vfpv4’, ‘vfpv4-d16’, ‘fpv4-sp-d16’, ‘neon-vfpv4’, ‘fpv5-d16’, ‘fpv5-sp-d16’, ‘fp-armv8’, ‘neon-fp-armv8’, and ‘crypto-neon-fp-armv8’.

If -msoft-float is specified this specifies the format of floating-point values.


If the selected floating-point hardware includes the NEON extension (e.g. -mfpu=‘neon’), note that floating-point operations are not generated by GCC's auto-vectorization pass unless -funsafe-math-optimizations is also specified. This is because NEON hardware does not fully implement the IEEE 754 standard for floating-point arithmetic (in particular denormal values are treated as zero), so the use of NEON instructions may lead to a loss of precision. 

[링크 : https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html]

    [링크 : https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=98354] 



+

2016.03.14

-ftree-vectorizer-verbose=1

[링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0002a/ch01s04s03.html]


Using the Vectorizer


Vectorization is enabled by the flag -ftree-vectorize and by default at -O3. To allow vectorization on powerpc* platforms also use -maltivec. On i?86 and x86_64 platforms use -msse/-msse2. To enable vectorization of floating point reductions use -ffast-math or -fassociative-math.

-ftree-vectorizer-verbose=2

[링크 : https://gcc.gnu.org/projects/tree-ssa/vectorization.html]

'Programming > neon' 카테고리의 다른 글

node.js 멀티코어 사용하기  (0) 2018.09.10
kernel mode neon support?  (0) 2015.05.06
NEON instruction  (0) 2015.05.05
neon 예제 실행 + 커널 교체  (0) 2015.05.04
arm neon 예제 컴파일  (0) 2015.05.03
Posted by 구차니