1436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovtypedef enum { 2436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov TO_NEAREST=0, 3436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov TO_ZERO, 4436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov TO_PLUS_INFINITY, 5436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov TO_MINUS_INFINITY 6436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} round_mode_t; 7436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 8436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovchar *round_mode_name[] = { "near", "zero", "+inf", "-inf" }; 9436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov 10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanovvoid set_rounding_mode(round_mode_t mode) 11436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov{ 12436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov switch(mode) { 13436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov case TO_NEAREST: 14436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( 15436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "cfc1 $t0, $31" "\n\t" 16436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "srl $t0, 2" "\n\t" 17436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "sll $t0, 2" "\n\t" 18436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ctc1 $t0, $31" "\n\t" 19436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 20436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 21436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0" 22436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); 23436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov break; 24436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov case TO_ZERO: 25436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( 26436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "cfc1 $t0, $31" "\n\t" 27436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "srl $t0, 2" "\n\t" 28436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "sll $t0, 2" "\n\t" 29436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "addiu $t0, 1" "\n\t" 30436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ctc1 $t0, $31" "\n\t" 31436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 32436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 33436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0" 34436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); 35436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov break; 36436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov case TO_PLUS_INFINITY: 37436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( 38436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "cfc1 $t0, $31" "\n\t" 39436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "srl $t0, 2" "\n\t" 40436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "sll $t0, 2" "\n\t" 41436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "addiu $t0, 2" "\n\t" 42436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ctc1 $t0, $31" "\n\t" 43436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 44436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 45436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0" 46436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); 47436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov break; 48436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov case TO_MINUS_INFINITY: 49436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov __asm__ __volatile__( 50436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "cfc1 $t0, $31" "\n\t" 51436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "srl $t0, 2" "\n\t" 52436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "sll $t0, 2" "\n\t" 53436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "addiu $t0, 3" "\n\t" 54436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov "ctc1 $t0, $31" "\n\t" 55436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 56436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : 57436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov : "t0" 58436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov ); 59436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov break; 60436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov } 61436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov} 62