PageRenderTime 37ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/AustinLib/src/traces/BranchDistanceTrace.cpp

http://austin-sbst.googlecode.com/
C++ | 808 lines | 779 code | 20 blank | 9 comment | 163 complexity | a48b467c158f05a81a819fb936ea5347 MD5 | raw file
  1. /*
  2. * BranchDistanceTrace.cpp
  3. *
  4. * Created on: 19 Jul 2010
  5. * Author: kiran
  6. */
  7. #include "BranchDistanceTrace.h"
  8. using namespace std;
  9. using namespace austin;
  10. BranchDistanceTrace::BranchDistanceTrace(const string& fname)
  11. : Trace(fname), key ("__TRACE__bd__"), sep (",")
  12. {
  13. // TODO Auto-generated constructor stub
  14. }
  15. BranchDistanceTrace::~BranchDistanceTrace() {
  16. // TODO Auto-generated destructor stub
  17. this->Trace::CloseTraceFile();
  18. }
  19. BranchDistanceTrace* bdtrace;
  20. extern "C" long double Austin__Min(long double d1, long double d2)
  21. {
  22. if(d1 <= d2) return d1;
  23. else return d2;
  24. }
  25. extern "C" long double Austin__Max(long double d1, long double d2)
  26. {
  27. if(d1 >= d2) return d1;
  28. else return d2;
  29. }
  30. namespace austin {
  31. extern "C" void Austin__SendBranchDistances(unsigned int fid, unsigned int nid,
  32. unsigned int index, unsigned int values, ...)
  33. {
  34. assert(values > 0);
  35. va_list ap;
  36. va_start(ap, values);
  37. assert(bdtrace != NULL);
  38. bdtrace->Trace::OpenTraceFile();
  39. bdtrace->ofs << fid << bdtrace->sep << nid << bdtrace->sep << index << bdtrace->sep;
  40. for (unsigned int i = 0; i < values; i++)
  41. {
  42. /**TODO: Make setprecision configurable parameter */
  43. bdtrace->ofs << fixed << setprecision(16) << va_arg(ap, long double) << bdtrace->sep;
  44. }
  45. bdtrace->ofs << endl;
  46. bdtrace->Trace::CloseTraceFile();
  47. va_end(ap);
  48. }
  49. }
  50. long double validateF(float res)
  51. {
  52. if(res != res)
  53. return 1;
  54. else
  55. return res;
  56. }
  57. long double validateF(double res)
  58. {
  59. if(res != res)
  60. return 1;
  61. else
  62. return res;
  63. }
  64. long double validateF(long double res)
  65. {
  66. if(res != res)
  67. return 1;
  68. else
  69. return res;
  70. }
  71. extern "C" {
  72. long double Austin__EvalEquals__Void(void* lhs, void* rhs)
  73. {
  74. if(lhs == rhs) return 0;
  75. else return 1;
  76. }
  77. long double Austin__EvalEquals__Char(char lhs, char rhs)
  78. {
  79. if(lhs == rhs) return 0;
  80. else return abs((int)(lhs - rhs));
  81. }
  82. long double Austin__EvalEquals__SChar(signed char lhs, signed char rhs)
  83. {
  84. if(lhs == rhs) return 0;
  85. else return abs((int)(lhs - rhs));
  86. }
  87. long double Austin__EvalEquals__UChar(unsigned char lhs, unsigned char rhs)
  88. {
  89. if(lhs == rhs) return 0;
  90. else return abs((int)(lhs - rhs));
  91. }
  92. long double Austin__EvalEquals__Bool(bool lhs, bool rhs)
  93. {
  94. return (lhs == rhs)? 1:0;
  95. }
  96. long double Austin__EvalEquals__Int(int lhs, int rhs)
  97. {
  98. if(lhs == rhs) return 0;
  99. else return abs(lhs - rhs);
  100. }
  101. long double Austin__EvalEquals__UInt(unsigned int lhs, unsigned int rhs)
  102. {
  103. if(lhs == rhs) return 0;
  104. else
  105. {
  106. double res = fabs((double)(lhs - rhs));
  107. return validateF(res);
  108. }
  109. }
  110. long double Austin__EvalEquals__Short(short lhs, short rhs)
  111. {
  112. if(lhs == rhs) return 0;
  113. else return abs((int)(lhs - rhs));
  114. }
  115. long double Austin__EvalEquals__UShort(unsigned short lhs, unsigned short rhs)
  116. {
  117. if(lhs == rhs) return 0;
  118. else return abs((int)(lhs - rhs));
  119. }
  120. long double Austin__EvalEquals__Long(long lhs, long rhs)
  121. {
  122. if(lhs == rhs) return 0;
  123. else return labs(lhs - rhs);
  124. }
  125. long double Austin__EvalEquals__ULong(unsigned long lhs, unsigned long rhs)
  126. {
  127. if(lhs == rhs) return 0;
  128. else
  129. {
  130. double res = fabs((double)(lhs - rhs));
  131. return validateF(res);
  132. }
  133. }
  134. long double Austin__EvalEquals__LongLong(long long lhs, long long rhs)
  135. {
  136. if(lhs == rhs) return 0;
  137. else
  138. {
  139. long double res = fabs((long double)(lhs - rhs));
  140. return validateF(res);
  141. }
  142. }
  143. long double Austin__EvalEquals__ULongLong(unsigned long long lhs, unsigned long long rhs)
  144. {
  145. if(lhs == rhs) return 0;
  146. else
  147. {
  148. long double res = fabs((long double)(lhs - rhs));
  149. return validateF(res);
  150. }
  151. }
  152. long double Austin__EvalEquals__Float(float lhs, float rhs)
  153. {
  154. if(lhs == rhs) return 0;
  155. else
  156. {
  157. float res = fabs(lhs - rhs);
  158. return validateF(res);
  159. }
  160. }
  161. long double Austin__EvalEquals__Double(double lhs, double rhs)
  162. {
  163. if(lhs == rhs) return 0;
  164. else
  165. {
  166. double res = fabs(lhs - rhs);
  167. return validateF(res);
  168. }
  169. }
  170. long double Austin__EvalEquals__LongDouble(long double lhs, long double rhs)
  171. {
  172. if(lhs == rhs) return 0;
  173. else
  174. {
  175. long double res = fabs(lhs - rhs);
  176. return validateF(res);
  177. }
  178. }
  179. long double Austin__EvalNotEqual__Void(void* lhs, void* rhs)
  180. {
  181. if(lhs != rhs) return 0;
  182. else return FAILURE_CONSTANT;
  183. }
  184. long double Austin__EvalNotEqual__Char(char lhs, char rhs)
  185. {
  186. if(lhs != rhs) return 0;
  187. else
  188. {
  189. return FAILURE_CONSTANT;
  190. }
  191. }
  192. long double Austin__EvalNotEqual__SChar(signed char lhs, signed char rhs)
  193. {
  194. if(lhs != rhs) return 0;
  195. else
  196. {
  197. return FAILURE_CONSTANT;
  198. }
  199. }
  200. long double Austin__EvalNotEqual__UChar(unsigned char lhs, unsigned char rhs)
  201. {
  202. if(lhs != rhs) return 0;
  203. else
  204. {
  205. return FAILURE_CONSTANT;
  206. }
  207. }
  208. long double Austin__EvalNotEqual__Bool(bool lhs, bool rhs)
  209. {
  210. return (lhs != rhs)? 0:1;
  211. }
  212. long double Austin__EvalNotEqual__Int(int lhs, int rhs)
  213. {
  214. if(lhs != rhs) return 0;
  215. else
  216. {
  217. return FAILURE_CONSTANT;
  218. }
  219. }
  220. long double Austin__EvalNotEqual__UInt(unsigned int lhs, unsigned int rhs)
  221. {
  222. if(lhs != rhs) return 0;
  223. else
  224. {
  225. return FAILURE_CONSTANT;
  226. }
  227. }
  228. long double Austin__EvalNotEqual__Short(short lhs, short rhs)
  229. {
  230. if(lhs != rhs) return 0;
  231. else
  232. {
  233. return FAILURE_CONSTANT;
  234. }
  235. }
  236. long double Austin__EvalNotEqual__UShort(unsigned short lhs, unsigned short rhs)
  237. {
  238. if(lhs != rhs) return 0;
  239. else
  240. {
  241. return FAILURE_CONSTANT;
  242. }
  243. }
  244. long double Austin__EvalNotEqual__Long(long lhs, long rhs)
  245. {
  246. if(lhs != rhs) return 0;
  247. else
  248. {
  249. return FAILURE_CONSTANT;
  250. }
  251. }
  252. long double Austin__EvalNotEqual__ULong(unsigned long lhs, unsigned long rhs)
  253. {
  254. if(lhs != rhs) return 0;
  255. else
  256. {
  257. return FAILURE_CONSTANT;
  258. }
  259. }
  260. long double Austin__EvalNotEqual__LongLong(long long lhs, long long rhs)
  261. {
  262. if(lhs != rhs) return 0;
  263. else
  264. {
  265. return FAILURE_CONSTANT;
  266. }
  267. }
  268. long double Austin__EvalNotEqual__ULongLong(unsigned long long lhs, unsigned long long rhs)
  269. {
  270. if(lhs != rhs) return 0;
  271. else
  272. {
  273. return FAILURE_CONSTANT;
  274. }
  275. }
  276. long double Austin__EvalNotEqual__Float(float lhs, float rhs)
  277. {
  278. if(lhs != rhs) return 0;
  279. else
  280. {
  281. return FAILURE_CONSTANT;
  282. }
  283. }
  284. long double Austin__EvalNotEqual__Double(double lhs, double rhs)
  285. {
  286. if(lhs != rhs) return 0;
  287. else
  288. {
  289. return FAILURE_CONSTANT;
  290. }
  291. }
  292. long double Austin__EvalNotEqual__LongDouble(long double lhs, long double rhs)
  293. {
  294. if(lhs != rhs) return 0;
  295. else
  296. {
  297. return FAILURE_CONSTANT;
  298. }
  299. }
  300. long double Austin__EvalLessThan__Void(void* lhs, void* rhs)
  301. {
  302. if(lhs < rhs) return 0;
  303. else return 1;
  304. }
  305. long double Austin__EvalLessThan__Char(char lhs, char rhs)
  306. {
  307. if(lhs < rhs)
  308. return 0;
  309. else
  310. return (long double)((char)((char)(lhs - rhs) + 1));
  311. }
  312. long double Austin__EvalLessThan__SChar(signed char lhs, signed char rhs)
  313. {
  314. if(lhs < rhs)
  315. return 0;
  316. else
  317. return (long double)((signed char)((signed char)(lhs - rhs) + 1));
  318. }
  319. long double Austin__EvalLessThan__UChar(unsigned char lhs, unsigned char rhs)
  320. {
  321. if(lhs < rhs)
  322. return 0;
  323. else
  324. return (long double)((signed char)((unsigned char)(lhs - rhs) + 1));
  325. }
  326. long double Austin__EvalLessThan__Bool(bool lhs, bool rhs)
  327. {
  328. if(lhs == false && rhs == true)
  329. return 0;
  330. else
  331. return 1;
  332. }
  333. long double Austin__EvalLessThan__Int(int lhs, int rhs)
  334. {
  335. if(lhs < rhs)
  336. return 0;
  337. else
  338. return (long double)((int)((int)(lhs - rhs) + 1));
  339. }
  340. long double Austin__EvalLessThan__UInt(unsigned int lhs, unsigned int rhs)
  341. {
  342. if(lhs < rhs)
  343. return 0;
  344. else
  345. return (long double)((unsigned int)((unsigned int)(lhs - rhs) + 1));
  346. }
  347. long double Austin__EvalLessThan__Short(short lhs, short rhs)
  348. {
  349. if(lhs < rhs)
  350. return 0;
  351. else
  352. return (long double)((short)((short)(lhs - rhs) + 1));
  353. }
  354. long double Austin__EvalLessThan__UShort(unsigned short lhs, unsigned short rhs)
  355. {
  356. if(lhs < rhs)
  357. return 0;
  358. else
  359. return (long double)((unsigned int)((unsigned short)(lhs - rhs) + 1));
  360. }
  361. long double Austin__EvalLessThan__Long(long lhs, long rhs)
  362. {
  363. if(lhs < rhs)
  364. return 0;
  365. else
  366. return (long double)((long)((long)(lhs - rhs) + 1));
  367. }
  368. long double Austin__EvalLessThan__ULong(unsigned long lhs, unsigned long rhs)
  369. {
  370. if(lhs < rhs)
  371. return 0;
  372. else
  373. return (long double)((unsigned long)((unsigned long)(lhs - rhs) + 1));
  374. }
  375. long double Austin__EvalLessThan__LongLong(long long lhs, long long rhs)
  376. {
  377. if(lhs < rhs)
  378. return 0;
  379. else
  380. return (long double)((long long)((long long)(lhs - rhs) + 1));
  381. }
  382. long double Austin__EvalLessThan__ULongLong(unsigned long long lhs, unsigned long long rhs)
  383. {
  384. if(lhs < rhs)
  385. return 0;
  386. else
  387. return (long double)((unsigned long long)((unsigned long long)(lhs - rhs) + 1));
  388. }
  389. long double Austin__EvalLessThan__Float(float lhs, float rhs)
  390. {
  391. if(lhs < rhs)
  392. return 0;
  393. else
  394. {
  395. float res = lhs - rhs;
  396. res = validateF(res);
  397. return (res + 1);
  398. }
  399. }
  400. long double Austin__EvalLessThan__Double(double lhs, double rhs)
  401. {
  402. if(lhs < rhs)
  403. return 0;
  404. else
  405. {
  406. double res = lhs - rhs;
  407. res = validateF(res);
  408. return (res + 1);
  409. }
  410. }
  411. long double Austin__EvalLessThan__LongDouble(long double lhs, long double rhs)
  412. {
  413. if(lhs < rhs)
  414. return 0;
  415. else
  416. {
  417. long double res = lhs - rhs;
  418. res = validateF(res);
  419. return (res + 1);
  420. }
  421. }
  422. long double Austin__EvalGreaterThan__Void(void* lhs, void* rhs)
  423. {
  424. if(lhs > rhs) return 0;
  425. else return 1;
  426. }
  427. long double Austin__EvalGreaterThan__Char(char lhs, char rhs)
  428. {
  429. if(lhs > rhs)
  430. return 0;
  431. else
  432. return (long double)((char)((char)(rhs - lhs) + 1));
  433. }
  434. long double Austin__EvalGreaterThan__SChar(signed char lhs, signed char rhs)
  435. {
  436. if(lhs > rhs)
  437. return 0;
  438. else
  439. return (long double)((signed char)((signed char)(rhs - lhs) + 1));
  440. }
  441. long double Austin__EvalGreaterThan__UChar(unsigned char lhs, unsigned char rhs)
  442. {
  443. if(lhs > rhs)
  444. return 0;
  445. else
  446. return (long double)((unsigned char)((unsigned char)(rhs - lhs) + 1));
  447. }
  448. long double Austin__EvalGreaterThan__Bool(bool lhs, bool rhs)
  449. {
  450. if(lhs == true && rhs == false)
  451. return 0;
  452. else
  453. return 1;
  454. }
  455. long double Austin__EvalGreaterThan__Int(int lhs, int rhs)
  456. {
  457. if(lhs > rhs)
  458. return 0;
  459. else
  460. return (long double)((int)((int)(rhs - lhs) + 1));
  461. }
  462. long double Austin__EvalGreaterThan__UInt(unsigned int lhs, unsigned int rhs)
  463. {
  464. if(lhs > rhs)
  465. return 0;
  466. else
  467. return (long double)((unsigned int)((unsigned int)(rhs - lhs) + 1));
  468. }
  469. long double Austin__EvalGreaterThan__Short(short lhs, short rhs)
  470. {
  471. if(lhs > rhs)
  472. return 0;
  473. else
  474. return (long double)((short)((short)(rhs - lhs) + 1));
  475. }
  476. long double Austin__EvalGreaterThan__UShort(unsigned short lhs, unsigned short rhs)
  477. {
  478. if(lhs > rhs)
  479. return 0;
  480. else
  481. return (long double)((unsigned short)((unsigned short)(rhs - lhs) + 1));
  482. }
  483. long double Austin__EvalGreaterThan__Long(long lhs, long rhs)
  484. {
  485. if(lhs > rhs)
  486. return 0;
  487. else
  488. return (long double)((long)((long)(rhs - lhs) + 1));
  489. }
  490. long double Austin__EvalGreaterThan__ULong(unsigned long lhs, unsigned long rhs)
  491. {
  492. if(lhs > rhs)
  493. return 0;
  494. else
  495. return (long double)((unsigned long)((unsigned long)(rhs - lhs) + 1));
  496. }
  497. long double Austin__EvalGreaterThan__LongLong(long long lhs, long long rhs)
  498. {
  499. if(lhs > rhs)
  500. return 0;
  501. else
  502. return (long double)((long long)((long long)(rhs - lhs) + 1));
  503. }
  504. long double Austin__EvalGreaterThan__ULongLong(unsigned long long lhs, unsigned long long rhs)
  505. {
  506. if(lhs > rhs)
  507. return 0;
  508. else
  509. return (long double)((unsigned long long)((unsigned long long)(rhs - lhs) + 1));
  510. }
  511. long double Austin__EvalGreaterThan__Float(float lhs, float rhs)
  512. {
  513. if(lhs > rhs)
  514. return 0;
  515. else
  516. {
  517. float res = rhs - lhs;
  518. res = validateF(res);
  519. return (res + 1);
  520. }
  521. }
  522. long double Austin__EvalGreaterThan__Double(double lhs, double rhs)
  523. {
  524. if(lhs > rhs)
  525. return 0;
  526. else
  527. {
  528. double res = rhs - lhs;
  529. res = validateF(res);
  530. return (res + 1);
  531. }
  532. }
  533. long double Austin__EvalGreaterThan__LongDouble(long double lhs, long double rhs)
  534. {
  535. if(lhs > rhs)
  536. return 0;
  537. else
  538. {
  539. long double res = rhs - lhs;
  540. res = validateF(res);
  541. return (res + 1);
  542. }
  543. }
  544. long double Austin__EvalLessThanEq__Void(void* lhs, void* rhs)
  545. {
  546. if(lhs <= rhs) return 0;
  547. else return 1;
  548. }
  549. long double Austin__EvalLessThanEq__Char(char lhs, char rhs)
  550. {
  551. if(lhs <= rhs)
  552. return 0;
  553. else
  554. return (long double)((char)((char)(lhs - rhs) + 1));
  555. }
  556. long double Austin__EvalLessThanEq__SChar(signed char lhs, signed char rhs)
  557. {
  558. if(lhs <= rhs)
  559. return 0;
  560. else
  561. return (long double)((signed char)((signed char)(lhs - rhs) + 1));
  562. }
  563. long double Austin__EvalLessThanEq__UChar(unsigned char lhs, unsigned char rhs)
  564. {
  565. if(lhs <= rhs)
  566. return 0;
  567. else
  568. return (long double)((unsigned char)((unsigned char)(lhs - rhs) + 1));
  569. }
  570. long double Austin__EvalLessThanEq__Bool(bool lhs, bool rhs)
  571. {
  572. if(lhs == false && rhs == true)
  573. return 0;
  574. else
  575. return 1;
  576. }
  577. long double Austin__EvalLessThanEq__Int(int lhs, int rhs)
  578. {
  579. if(lhs <= rhs)
  580. return 0;
  581. else
  582. return (long double)((int)((int)(lhs - rhs) + 1));
  583. }
  584. long double Austin__EvalLessThanEq__UInt(unsigned int lhs, unsigned int rhs)
  585. {
  586. if(lhs <= rhs)
  587. return 0;
  588. else
  589. return (long double)((unsigned int)((unsigned int)(lhs - rhs) + 1));
  590. }
  591. long double Austin__EvalLessThanEq__Short(short lhs, short rhs)
  592. {
  593. if(lhs <= rhs)
  594. return 0;
  595. else
  596. return (long double)((short)((short)(lhs - rhs) + 1));
  597. }
  598. long double Austin__EvalLessThanEq__UShort(unsigned short lhs, unsigned short rhs)
  599. {
  600. if(lhs <= rhs)
  601. return 0;
  602. else
  603. return (long double)((unsigned short)((unsigned short)(lhs - rhs) + 1));
  604. }
  605. long double Austin__EvalLessThanEq__Long(long lhs, long rhs)
  606. {
  607. if(lhs <= rhs)
  608. return 0;
  609. else
  610. return (long double)((long)((long)(lhs - rhs) + 1));
  611. }
  612. long double Austin__EvalLessThanEq__ULong(unsigned long lhs, unsigned long rhs)
  613. {
  614. if(lhs <= rhs)
  615. return 0;
  616. else
  617. return (long double)((unsigned long)((unsigned long)(lhs - rhs) + 1));
  618. }
  619. long double Austin__EvalLessThanEq__LongLong(long long lhs, long long rhs)
  620. {
  621. if(lhs <= rhs)
  622. return 0;
  623. else
  624. return (long double)((long long)((long long)(lhs - rhs) + 1));
  625. }
  626. long double Austin__EvalLessThanEq__ULongLong(unsigned long long lhs, unsigned long long rhs)
  627. {
  628. if(lhs <= rhs)
  629. return 0;
  630. else
  631. return (long double)((unsigned long long)((unsigned long long)(lhs - rhs) + 1));
  632. }
  633. long double Austin__EvalLessThanEq__Float(float lhs, float rhs)
  634. {
  635. if(lhs <= rhs)
  636. return 0;
  637. else
  638. {
  639. float res = lhs - rhs;
  640. res = validateF(res);
  641. return (res + 1);
  642. }
  643. }
  644. long double Austin__EvalLessThanEq__Double(double lhs, double rhs)
  645. {
  646. if(lhs <= rhs)
  647. return 0;
  648. else
  649. {
  650. double res = lhs - rhs;
  651. res = validateF(res);
  652. return (res + 1);
  653. }
  654. }
  655. long double Austin__EvalLessThanEq__LongDouble(long double lhs, long double rhs)
  656. {
  657. if(lhs <= rhs)
  658. return 0;
  659. else
  660. {
  661. long double res = lhs - rhs;
  662. res = validateF(res);
  663. return (res + 1);
  664. }
  665. }
  666. long double Austin__EvalGreaterThanEq__Void(void* lhs, void* rhs)
  667. {
  668. if(lhs >= rhs) return 0;
  669. else return 1;
  670. }
  671. long double Austin__EvalGreaterThanEq__Char(char lhs, char rhs)
  672. {
  673. if(lhs >= rhs)
  674. return 0;
  675. else
  676. return (long double)((char)((char)(rhs - lhs) + 1));
  677. }
  678. long double Austin__EvalGreaterThanEq__SChar(signed char lhs, signed char rhs)
  679. {
  680. if(lhs >= rhs)
  681. return 0;
  682. else
  683. return (long double)((signed char)((signed char)(rhs - lhs) + 1));
  684. }
  685. long double Austin__EvalGreaterThanEq__UChar(unsigned char lhs, unsigned char rhs)
  686. {
  687. if(lhs >= rhs)
  688. return 0;
  689. else
  690. return (long double)((unsigned char)((unsigned char)(rhs - lhs) + 1));
  691. }
  692. long double Austin__EvalGreaterThanEq__Bool(bool lhs, bool rhs)
  693. {
  694. if(lhs == true && rhs == false)
  695. return 0;
  696. else
  697. return 1;
  698. }
  699. long double Austin__EvalGreaterThanEq__Int(int lhs, int rhs)
  700. {
  701. if(lhs >= rhs)
  702. return 0;
  703. else
  704. return (long double)((int)((int)(rhs - lhs) + 1));
  705. }
  706. long double Austin__EvalGreaterThanEq__UInt(unsigned int lhs, unsigned int rhs)
  707. {
  708. if(lhs >= rhs)
  709. return 0;
  710. else
  711. return (long double)((unsigned int)((unsigned int)(rhs - lhs) + 1));
  712. }
  713. long double Austin__EvalGreaterThanEq__Short(short lhs, short rhs)
  714. {
  715. if(lhs >= rhs)
  716. return 0;
  717. else
  718. return (long double)((short)((short)(rhs - lhs) + 1));
  719. }
  720. long double Austin__EvalGreaterThanEq__UShort(unsigned short lhs, unsigned short rhs)
  721. {
  722. if(lhs >= rhs)
  723. return 0;
  724. else
  725. return (long double)((unsigned short)((unsigned short)(rhs - lhs) + 1));
  726. }
  727. long double Austin__EvalGreaterThanEq__Long(long lhs, long rhs)
  728. {
  729. if(lhs >= rhs)
  730. return 0;
  731. else
  732. return (long double)((long)((long)(rhs - lhs) + 1));
  733. }
  734. long double Austin__EvalGreaterThanEq__ULong(unsigned long lhs, unsigned long rhs)
  735. {
  736. if(lhs >= rhs)
  737. return 0;
  738. else
  739. return (long double)((unsigned long)((unsigned long)(rhs - lhs) + 1));
  740. }
  741. long double Austin__EvalGreaterThanEq__LongLong(long long lhs, long long rhs)
  742. {
  743. if(lhs >= rhs)
  744. return 0;
  745. else
  746. return (long double)((long long)((long long)(rhs - lhs) + 1));
  747. }
  748. long double Austin__EvalGreaterThanEq__ULongLong(unsigned long long lhs, unsigned long long rhs)
  749. {
  750. if(lhs >= rhs)
  751. return 0;
  752. else
  753. return (long double)((unsigned long long)((unsigned long long)(rhs - lhs) + 1));
  754. }
  755. long double Austin__EvalGreaterThanEq__Float(float lhs, float rhs)
  756. {
  757. if(lhs >= rhs)
  758. return 0;
  759. else
  760. {
  761. float res = rhs - lhs;
  762. res = validateF(res);
  763. return (res + 1);
  764. }
  765. }
  766. long double Austin__EvalGreaterThanEq__Double(double lhs, double rhs)
  767. {
  768. if(lhs >= rhs)
  769. return 0;
  770. else
  771. {
  772. double res = rhs - lhs;
  773. res = validateF(res);
  774. return (res + 1);
  775. }
  776. }
  777. long double Austin__EvalGreaterThanEq__LongDouble(long double lhs, long double rhs)
  778. {
  779. if(lhs >= rhs)
  780. return 0;
  781. else
  782. {
  783. long double res = rhs - lhs;
  784. res = validateF(res);
  785. return (res + 1);
  786. }
  787. }
  788. }